小程序request请求

想问大家一个问题,我在app.js里面写了一个公共的function,此function里面有request,然后return回传值,现在问题是request是异步请求,return的时候请求还未执行完,会传个空值过去,这种怎么解决?

阅读 2.6k
2 个回答

你这个 公共function 接受一个函数作为参数。
request 拿到请求返回值得时候,执行这个回调函数参数。

  //app.js
  getUserInfo (callback) {
    if (this.globalData.user) {
      callback(this.globalData.user)
    } else {
        wx.request({
            url: 'xxx',
            method: 'POST',
            data: {},
            success: res => {
                this.globalData.user = res.data.data
                callback(res.data.data)
            }
        })
    }
  }

  // index.js
  onLoad() {
    app.getUserInfo(this.getList) // 获取到getUserInfo结果后执行getList函数
  }

或者,你这个 公共function 返回1个 Promise 函数,拿到返回值的时候 resolve 一下。

//app.js
getUserInfo () {
  return new Promise((reslove, reject) => {
    if (this.globalData.user) {
      resolve(this.globalData.user)
    } else {
        wx.request({
            url: 'xxx',
            method: 'POST',
            data: {},
            success: res => {
                this.globalData.user = res.data.data
                resolve(res.data.data)
            }
        })
    }
  })
}

  // index.js
onLoad() {
    app.getUserInfo().then(res => {
        console.log(res)  //  res 就是getUserInfo的 resolve 的值。
    })
}
export let http = ({url,method,data}) => {
  let p = new Promise((resolve,reject) => {
    wx.request({
      url,
      data,
      method,
      header: {'content-type':'application/json'},
      success: resolve,
      fail: reject
    })
  })
  return p;
}
使用import { http } from './async.js';
export let getList = (data) => {
  return http({
          url: `${接口}${拼接的字符串}`,
          method:'get',
          data
        })
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题