按照事件順序,小程序初始化時(shí)觸發(fā)App里的onLaunch,后面再執(zhí)行頁(yè)面Page里的onLoad,但是在onLaunch里請(qǐng)求獲取是否有權(quán)限堆生,等待返回值的時(shí)候Page里的onLoad事件就已經(jīng)執(zhí)行了。
//app.js
App({
onLaunch: function () {
console.log('onLaunch');
wx.request({
url: 'test.php', //僅為示例雷酪,并非真實(shí)的接口地址
data: {
},
success: function(res) {
console.log('onLaunch-request-success');
// 將employId賦值給全局變量淑仆,提供給頁(yè)面做判斷
this.globalData.employId = res.employId;
}
})
},
globalData: {
employId: ''
}
})
//index.js
//獲取應(yīng)用實(shí)例
const app = getApp()
Page({
data: {
bindDisabled: false
},
onLoad: function () {
console.log('onLoad');
console.log('onLoad app.globalData.employId = ' + app.globalData.employId);
//判斷是用戶是否綁定了
if (app.globalData.employId && app.globalData.employId != '') {
this.setData({
bindDisabled: true
});
}
})
控制臺(tái)打印結(jié)果
onLaunch
onLoad
onLoad app.globalData.employId =
onLaunch-request-success
現(xiàn)在我們需要在onLaunch請(qǐng)求完之后再執(zhí)行一次Page的onLoad方法。
App({
onLaunch: function () {
wx.request({
url: 'test.php', //僅為示例哥力,并非真實(shí)的接口地址
data: {
},
success: function(res) {
this.globalData.employId = res.employId;
//由于這里是網(wǎng)絡(luò)請(qǐng)求蔗怠,可能會(huì)在 Page.onLoad 之后才返回
// 所以此處加入 callback 以防止這種情況
if (this.employIdCallback){
this.employIdCallback(employId);
}
}
})
},
globalData: {
employId: ''
}
})
//index.js
//獲取應(yīng)用實(shí)例
const app = getApp()
Page({
data: {
bindDisabled: false
},
onLoad: function () {
//判斷是用戶是否綁定了
if (app.globalData.employId && app.globalData.employId != '') {
this.setData({
bindDisabled: true
});
} else {
// 由于 getUserInfo 是網(wǎng)絡(luò)請(qǐng)求,可能會(huì)在 Page.onLoad 之后才返回
// 所以此處加入 callback 以防止這種情況
app.employIdCallback = employId => {
if (employId != '') {
this.setData({
bindDisabled: true
});
}
}
}
}
})
最后執(zhí)行順序
[App] onLaunch -> [Page] onLoad -> [App] onLaunch sucess callback-> [Page] onLoad收據(jù)改變
問(wèn)題:onLaunch運(yùn)行后進(jìn)行異步請(qǐng)求時(shí)省骂,程序不會(huì)停止蟀淮,執(zhí)行onload, 我們希望onLaunch執(zhí)行完后再執(zhí)行onload
想法:
1.不破壞異步操作,照常執(zhí)行
首先:執(zhí)行onlauch钞澳,異步請(qǐng)求怠惶,在請(qǐng)求過(guò)程中,程序不會(huì)停止轧粟,開(kāi)始執(zhí)行onload中代碼:if語(yǔ)句不存在策治,執(zhí)行else語(yǔ)句:增加回調(diào)函數(shù),但是這里的employ是沒(méi)有數(shù)據(jù)的@家鳌通惫!所以不會(huì)修改數(shù)據(jù) bindDisabled,開(kāi)始綁定函數(shù),然后等待onlauch的異步成功混蔼,等待中......,然后onlauch請(qǐng)求成功后履腋,調(diào)用success函數(shù),賦值,并且執(zhí)行回調(diào)函數(shù)employIdCallback遵湖,數(shù)據(jù)時(shí)存在的悔政,所以修改數(shù)據(jù)修改數(shù)據(jù) bindDisabled
原文作者:匆匆那年_海,博客主頁(yè):http://www.reibang.com/u/910c0667c515
95后前端漢子延旧,愛(ài)編程谋国、優(yōu)秀、聰明迁沫、理性芦瘾、沉穩(wěn)、智慧的程序猿一枚集畅。