前段時間開發了一款微信小程序,運行了也幾個月了,在index.js中的onLoad生命周期里獲取app.js中onLaunch生命周期中在接口里動態設置的globalData一直沒有問題,結果昨天就獲取不到動態設置的global數據了。因為我要獲取小程序的unionid以及通過unionid去獲取微信的openId,並且共享數據,最開始我是通過storage來做數據共享的,后來測試發現storage存在莫名被清空的情況,后來轉用globalData來做數據共享,查了下,是因為app.js中的onLaunch是異步的,當小程序首頁打開的時候,app.js中在onLaunch里的接口還沒有通沒有返回值,也就沒有辦法設置相應的globalData,但index.js已經執行了,當然就拿不到在app.js中動態設置的globalData的值了,我們需要的是onLaunch請求完之后,再執行index.js中的onLoad方法,解決方案如下:
在首頁index.js中先判斷一下當前app.globalData.testData是否有值,如果有則正常操作,如果沒有(第一次)則定義定義一個app方法(回調函數)app.testDataCallback = testData => {...},app.js在請求success里,判斷index.js是否定義了回調方法,如果有就執行該方法。因為回調函數是在index.js中定義的方法,所以作用域 this 指向index頁面,下面我們看下示例代碼。
| //app.js |
| //index.js Page({ |
