时隔好久,因为碰到这些坑,觉得很有必要记录一下
现在已经是01:57了,在今天突然兴起写的一个Vue页面中,一通操作后在方法A,将修改的值保存到LocalStorage中,但是在另一个点击方法B中调用了方法A,随后用LocalStorage(key)获取了刚刚保存的值,很奇怪每次都是获取到上一次存的值
methods: {
// 方法A大体就是根据接口获取的数据判断是否符合要求,符合就保存true,不符合就保存false
function A() {
// ......
localStorage.setItem('aa', true) //假设这次执行true,但是上次保存的是false
// ......
localStorage.setItem('aa', false)
},
// 算是单击方法
function B(){
A() // 调用了A()后马上获取方法
var re = localStorage.getItem('aa') // 但是这里每次都是获取到上次保存的内容 false
}
}
如此循环,每次都只能获取到上次操作A后保存的值,在大半夜骚扰了一波我们老师后,
得知:在进行使用axios获取接口数据时产生了异步操作
解决方法: 使用定时器设置500毫秒以上即可正确及时地获取到不延迟的数据 setTimeOut
更新代码如下
methods: {
// 方法A大体就是根据接口获取的数据判断是否符合要求,符合就保存true,不符合就保存false
function A() {
// ......
localStorage.setItem('aa', true) //假设这次执行true,但是上次保存的是false
// ......
localStorage.setItem('aa', false)
},
// 算是单击方法
function B(){
A() // 调用了A()后马上获取方法
setTimeout(() => {
var re = localStorage.getItem('aa') // 但是这里每次都是获取到上次保存的内容 false
}, 1000);
}
}
然而,接着在确认我得到想要的值后(在控制台实时log打印结果),却在之后的if(re)判断出现了问题,
var re = localStorage.getItem('aa')
if (re) {
// ......
} else {
// .........
}
总不能正确到我想要的分支去,不卖关子直接说了,这样直接使用变量去接收值,
因为js的弱类型的关系,typeof re 的结果说 String,而if的判断为
当变量为0、null、undefined、false时返回为false,除此之外变量为非0的值、对象、数组、字符串、true时返回的都为true。
直接使用re判断的说字符串 ‘true’, ‘false’结果一直为 true
所以我加了一道判断
let result = false;
if (re === 'true') {
result = true
} else {
result = false
}
总结:真的说很多细节的东西很折腾人,这是本人自己的记录,如果能帮助到你就更好了!