微信小程序请求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.页面制作
下一篇:
解决微信小程序无法访问后台服务器问题