js作為腳本語言,雖然說也是順序執(zhí)行减俏,但是會出現(xiàn)上一個語句還沒有執(zhí)行完裁蚁,就執(zhí)行下一個語句的情況,如果兩個執(zhí)行方法存在強關聯(lián)性,即第二個方法的執(zhí)行必須依賴第一個方法執(zhí)行完搜立,否則會出錯 比如:
Page({
data: {
data: {}
},
onload: function() {
this.updateData();
this.updateState();
},
updateData: function() {
var that = this
wx.request({
url: XXXXX, //你的請求地址
data: {},
success: function(res) {
that.setData({
data: this.data.data
}
}
})
},
updateState: function() {
var data = this.data.data
//進行數(shù)據(jù)狀態(tài)判斷
},
})
這樣運行的時候以躯,還沒有等到updateData更新到數(shù)據(jù),已經(jīng)在執(zhí)行updateState了啄踊,這樣得到的結(jié)果往往是不正確的忧设,于是找方法發(fā)現(xiàn)了ES6 的promise
promise的用法為:
const promist = new Promise(function(resolve,reject){
if(/*異步操作成功*/){
resolve(value);
}else{
reject(error);
}
})
于是改造原來代碼
Page({
data: {
data: {}
},
onload: function() {
var that =this
new Promise(function(resolve,reject){
that.updateData(resolve);
}).then(function(){
that.updateState();
})
},
updateData: function(resolve) {
var that = this
wx.request({
url: XXXXX, //你的請求地址
data: {},
success: function(res) {
that.setData({
data: this.data.data
if(resolve!=null){
resolve('ok')
}
}
}
})
},
updateState: function() {
var data = this.data.data
//進行數(shù)據(jù)狀態(tài)判斷
},
})
這樣就能保證updateData執(zhí)行完了之后才執(zhí)行updateState