最近在写一个小程序的监控文件,遇到一个很常见的错,就是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)
})
}
})
}
复制代码