收藏
回答

wx.request有promise版的么

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 小程序 需求 wx.request 工具 7 2.5.1

- 需求的场景描述(希望解决的问题)

登录后根据系统的用户id查询用户的数据,必须要登录接口执行完后才能调用查询接口,现在wx.request都是异步得的

- 希望提供的能力

wx.request,提供同步的的配置


回答关注问题邀请回答
收藏

3 个回答

  • 郭辉
    郭辉
    2019-01-30

    const DEFAULT_REQUEST_OPTIONS = {
    url: '',
       data: {},
       header: {
    'Content-Type': 'application/json'
       },
       method: 'GET',
       dataType: 'json'
    }


    let util = {

    request (opt) {
    let options = Object.assign({}, DEFAULT_REQUEST_OPTIONS, opt)
    let {
    url,
               data,
               header,
               method,
               dataType
    } = options
    try {
    header.token = getApp().globalData.token
               if (!header.token) {
    header.token = wx.getStorageSync('token')
    }
    } catch (e) {
    header.token = ''
           }
    return new Promise((resolve, reject) => {
    wx.request({
    url: basePath + url,
                   data: data,
                   header: header,
                   method: method,
                   dataType: dataType,
                   success: function (res) {
    let result = res.data || {}
    if (res.statusCode === 200) {
    if (result.code === statusCode.OK) {
    resolve(result)
    } else if (result.code === statusCode.FAIL) {

    reject(result)
    } else if (result.code === statusCode.NOT_AUTHENTICATED || result.code === statusCode.USER_FAIL || result.code === statusCode.NO_USER) {

    reject(result)
    } else {
    reject(result)
    }
    } else if (res.statusCode === 401) {

    reject(result)
    } else {
    result = Object.assign({}, result, { msg: `服务器错误${res.statusCode}` })
    reject(result)
    }
    },
                   fail: function (err) {
    reject(err)
    }
    })
           })
    }
    }


    2019-01-30
    赞同
    回复
  • 微盟
    微盟
    2019-01-30

    你可以自己封装一下最简单的方案就是


    const request = opts => new Promise((success, fail)=>{
     
      wx.request({...opts, success, fail})
     
    })


    2019-01-30
    赞同
    回复 2
    • 一直在奔跑
      一直在奔跑
      2019-01-31

      你好,这样能保证同步么,success回调执行完在执行then么?

      2019-01-31
      回复
    • struggle
      struggle
      2019-03-05回复一直在奔跑

      这可是异步,楼上瞎点评

      2019-03-05
      回复
  • 一直在奔跑
    一直在奔跑
    2019-01-29

    我现在是用回调解决的

    2019-01-29
    赞同
    回复
登录 后发表内容