欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

微信小程序中當(dāng)有異步操作或者耗時(shí)同步操作時(shí),不能保證app.js中的onLaunch與page.js - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識(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)案例查看更多