收藏
回答

小程序请求怎么做到异步啊?

我已经用Promise封装请求了,但还是异步的,看下代码吧

封装promise:

const post=(url,data)=>{
  return new Promise((resolve,reject)=>{
    wx.request({
      url:url,
      method:'POST',
      dataType:'json',
      data:data,
      header:{'content-type'"application/x-www-form-urlencoded"},
      success:function(res){
          resolve(res.data)
      },
      failfunction() {
          reject("请求数据失败");
      },
    })
  })
}


请求问题:

let data;
if(this.data.list){
  data=this.data.list;
}else{
   util.post(url,reqData).then((res)=>{
    console.log(res); //1
    data=res.data.list;
  });
}
console.log(data); //2


每次2比1先打印,感觉这种用的还是比较多的,想问下该怎么解决这个问题?

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

4 个回答

  • 拾忆
    拾忆
    2020-11-09

    async await 试一下

    2020-11-09
    有用 1
    回复 3
    • 路远
      路远
      2020-11-09
      用async已经可以了,上线的时候不用引入什么吧?
      2020-11-09
      回复
    • 拾忆
      拾忆
      2020-11-09回复路远
      不要的,详情设置这个就行了
      2020-11-09
      回复
    • 路远
      路远
      2020-11-09
      知道了,谢谢了
      2020-11-09
      回复
  • this
    this
    2020-11-09

    小程序已经支持async await的用法,不过要开启增强编译

    2020-11-09
    有用 1
    回复 4
  • 0123456789
    0123456789
    2021-03-30

    楼主,我这里有一个相当于是这个问题的升级版吧,情境是如下

    在一个页面的 onLoad 函数

    async onLoad (options) {

    await function (){

    ......//do something

    console.log(11111111)

    }

    console.log(222222)

    }

    控制台输出顺序 111111, 222222,, 这个没问题。

    但是如果在同页面的 onShow 生命周期函数 中 打印

    onShow () {

    console.log(3333333)

    }

    那么控制台打印的顺序就是 3333333, 111111, 222222。

    很明显,我们很多场景都是需要先将 onLoad 执行完,再去执行 onShow。

    所以,看看有什么办法可以解决吗?我初步想法是 onShow 也加 async/await


    2021-03-30
    有用
    回复 1
  • 陈宇明
    陈宇明
    2020-11-09

    支持async/await语法

    2020-11-09
    有用
    回复
登录 后发表内容
问题标签