最近在寫一個小程序的監控文件,遇到一個很常見的錯,就是setStorage和getStorage是異步的問題小程序
其中有兩段代碼是這樣寫的緩存
native.onLaunch = function (options) {
console.log("hook onLaunch", options);
onLaunch && onLaunch.apply(native, [options]);
getUID(function (uid) {
report("launch", options, uid, native.globalData.appid, native.globalData.mwbase || "https://v2m-test.mengxiaozhu.cn/ad-applet")
}, 'launch')
複製代碼
native.onShow = function (options) {
console.log("hook onShow", options);
onShow && onShow.apply(native, [options]);
getUID(function (uid) {
report("show", options, uid, native.globalData.appid, native.globalData.mwbase || "https://v2m-test.mengxiaozhu.cn/ad-applet")
}, 'show');
}
複製代碼
其實個人目的是這樣的bash
結果是app
個人解決方法異步
他的解決辦法ui
const setUid = function(cb) {
wx.setStorage({
key: 'KeyMw',
data: value,
success: function(res) {
cb(value)
console.log('SuccessSet', res)
},
fail: function(err) {
console.log('FailSet', err)
}
})
}
複製代碼
const stacks = [];
const getUID = funcction(cb) {
if(stacks.length >=0) {
stacks.push(cb)
}
wx.getStorage({
key: 'KeyMw',
success: function(res) {
if(res.data) {
const _cb = stacks.pop();
if(!_cb) {
return
}
_cb(res.data)
return
}
setUID(value => {
const _cb = stacks.pop();
if(!_cb) {
return
}
_cb(value)
})
},
fail: function() {
setUID(value => {
const _cb = stacks.pop();
if(!_cb) {
return
}
_cb(value)
})
}
})
}
複製代碼