微信小程序请求request异步问题
仅作为Shane个人笔记
问题的起因
打断点调试之后
发现程序执行的顺序并不一致,request请求后面的console会先request success里的console输出
查明原因之后
Shane发现还是有变相同步的办法------Promise Promise据网上的说法是某个大神开发出来的,17年后被小程序官方采用,所以无需再引入其他js文件即可使用
看看代码
这里Shane写一个示例
/**
* resolve很重要必须存在
* reject可作为请求失败返回错误信息
*/
hello: function(){
let that = this;
return new Promise(function (resolve, reject){
wx.request({
url: app.globalData.doMain + /模块/控制器/方法,
method: post,
header: {
content-type: application/x-www-form-urlencoded
},
success: function (res) {
//这里可以通过resolve返回请求数据
resolve(res.data.result);
//也可以直接赋值data里的全局变量
//假设data里有个全局变量叫random
//that.data.random = res.data.result;
//但必须有resolve();此时resolve();可不传参
//resolve();
}
});
});
},
写完示例之后,在onload里调用试试
/**
* then是关键
*/
onLoad: function () {
this.hello().then((res) => {
console.log("请求的数据:" + res);
//如果是给全局变量赋值
//引用上文hello当中的假设变量random
//console.log("请求的数据:" + this.data.random);
//后面的代码写这里面来
//甚至在此request之后还有request
//也可以按此形式进行套娃XD
});
//请求后代码不要写then外面
//写then里面去
//不然还是异步的
},
总结
通过Promise可以变相达到同步的效果 虽然不是真正意义上的同步 但是👴还要啥自行车??
-
用ThinkPHP6制作后台
上一篇:
uniapp开发微信小程序-2.页面制作
下一篇:
解决微信小程序无法访问后台服务器问题
