解决微信小程序异步执行问题
虽然小程序中是首先加载的是app.js,然后在执行页面的onload函数。但是在实际操作的过程中(特别是多层函数嵌套)会出现页面函数先执行完成的现象。而有些时候,我们需要在app.js加载完成之后再执行页面中的函数。因此有了标题所述问题。
解决此类问题,自己查询资料发现Promise可以解决此类问题,好像微信小程序中api的promise也可以解决。有兴趣的读者可以去研究研究。API Promise化
下面讲一讲我用的方法。
app.js
//登录
login:function(){
var that = this;
return new Promise(function(resolve, reject){
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
console.log(res.code)
//发送请求
wx.request({
url: that.globalData.severUrl, //接口地址
data: {code:res.code},
method:'GET',
header: {
'content-type': 'application/json' //默认值
},
success: function (res) {
resolve('success')
//后面的操作
},
fail:function (res) {
reject('error')
}
})
}
})
})
}
index.js
app.login().then(function(resolve, reject){
//resolve, reject可以用来判断,然后执行接下来的操作
})
这里需要注意的是:function(resolve, reject)必须对应上,即创建对象以及使用的时候要对应。
当然这里的写法多样,这只是其中一种。但个人感觉这种写法比较简洁。
欢迎大家讨论交流,批评指正!