知識(shí)
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營銷的便利,運(yùn)營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!
您當(dāng)前位置>首頁 » 新聞資訊 » 小程序相關(guān) >
微信小程序中當(dāng)有異步操作或者耗時(shí)同步操作時(shí),不能保證app.js中的onLaunch與page.js
發(fā)表時(shí)間:2020-9-26
發(fā)布人:葵宇科技
瀏覽次數(shù):147
微信小程序中當(dāng)有異步操作或者耗時(shí)同步操作時(shí),不能保證app.js中的onLaunch與page.js中onLoad先后執(zhí)行順序的解決方案
我在此為大家匯總了三種解決方案,大家普遍都會(huì)用這里的前兩種方法,個(gè)人認(rèn)為我的第三種方法更加巧妙且方便
方法一:
解決方法:定義回調(diào)函數(shù)
小程序網(wǎng)絡(luò)請(qǐng)求默認(rèn)為異步請(qǐng)求,在appjs的onLaunch運(yùn)行后進(jìn)行異步請(qǐng)求時(shí),程序不會(huì)停止,Page頁已執(zhí)行onload,
我們希望onLaunch執(zhí)行完后再執(zhí)行onload。 目標(biāo):>//app.js App({ >: function () { wx.request({ url: 'http://test.cn/login', //僅為示例,并非真實(shí)的接口地址 data: {}, success: function(res) { this.globalData.checkLogin = true; //由于這里是網(wǎng)絡(luò)請(qǐng)求,可能會(huì)在 Page.onLoad 之后才返回 // 所以此處加入 callback 以防止這種情況 if (this.checkLoginReadyCallback){ this.checkLoginReadyCallback(res); } } }) }, globalData: { checkLogin: false } }) //index.js //獲取應(yīng)用實(shí)例 const app = getApp() Page({ data: { test: false }, >: function () { let that = this; //判斷onLaunch是否執(zhí)行完畢 if (app.globalData.checkLogin){ that.setData({ test:true }) }else{ app.checkLoginReadyCallback = res => { that.setData({ test:true }) }; } } })執(zhí)行順序:[App]> //app.js: //將你本來寫在>:function(){ login:function(){ let that = this; return new Promise(function (resolve, reject) { // 登錄 wx.login({ success: res => { // 發(fā)送 res.code 到后臺(tái)換取 openId, sessionKey, unionId if (res.code) { // console.log('獲取用戶登錄憑證:' + code); // ------ 發(fā)送憑證 ------ /* * 通過code獲取登錄session */ wx.request({ url: 'xxx/login?code=' + res.code, method: 'GET', header: { 'content-type': 'application/json' }, success: function (res) { console.log(res) if (res.statusCode == 200) { // 注意這里 resolve(res); } else { console.log(res.errMsg) } }, }) } else { console.log('獲取用戶登錄失敗:' + res.errMsg); } } }) }) } } //page.js onLoad: function (options) { let _this = this; app.login().then(function (res) { let newDate = new Date(); // 修改到當(dāng)前的時(shí)間 _this.changeNowTime(); }) },
方法三:
解決方法:通過getCurrentPages()[0].onLoad()重新執(zhí)行一次page.js中的onLoad方法
不用每個(gè)頁面都寫相關(guān)邏輯,只需要在app.js中加入以下幾行相關(guān)代碼即可
缺點(diǎn):page.js中的onload方法會(huì)執(zhí)行兩次!//app.js >: function (info) { //當(dāng)進(jìn)入小程序的場景為通過分享進(jìn)入時(shí),預(yù)防onLoad鉤子請(qǐng)求不到數(shù)據(jù) if (info.path !== 'xxxxx/xxx/xxx') { console.log('info', info); setTimeout(() => { console.log('getCurrentPages', getCurrentPages()); getCurrentPages()[0].onLoad(info.query); }, 1000); } // 登錄 wx.login({ success: (xxx) => { //xxxxxx }, }); }
最后:希望大家補(bǔ)充其它相關(guān)方法,分享是每一位程序員都要有的美德~
轉(zhuǎn)載請(qǐng)注明出處!謝謝~
by:汪榮頂
相關(guān)案例查看更多
相關(guān)閱讀
- 云南網(wǎng)站建設(shè)招商
- 小程序開發(fā)
- 專業(yè)網(wǎng)站建設(shè)公司
- 二叉樹
- 前端開發(fā)
- web服務(wù)
- 網(wǎng)站建設(shè)百度官方
- 百度小程序公司
- 云南小程序開發(fā)公司
- 云南網(wǎng)站建設(shè)公司排名
- 昆明小程序定制開發(fā)
- 曲靖小程序開發(fā)
- 軟件定制
- 報(bào)廢車拆解軟件
- 開通微信小程序被騙
- 網(wǎng)站建設(shè)快速優(yōu)化
- 云南電商網(wǎng)站建設(shè)
- 前端
- 小程序退款
- 用戶登錄
- 百度自然排名
- 模版消息
- 小程序技術(shù)
- 昆明網(wǎng)站建設(shè)公司
- php網(wǎng)站
- 網(wǎng)絡(luò)公司排名
- 云南軟件定制
- 汽車報(bào)廢
- 政府網(wǎng)站建設(shè)服務(wù)
- 昆明網(wǎng)站開發(fā)