我已经用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)
},
fail: function() {
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先打印,感觉这种用的还是比较多的,想问下该怎么解决这个问题?
async await 试一下
小程序已经支持async await的用法,不过要开启增强编译
楼主,我这里有一个相当于是这个问题的升级版吧,情境是如下
在一个页面的 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
支持async/await语法