【记录一下】: JavaScript中的关于if判断和变量类型 and 异步调用的坑

时隔好久,因为碰到这些坑,觉得很有必要记录一下

现在已经是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
           }

总结:真的说很多细节的东西很折腾人,这是本人自己的记录,如果能帮助到你就更好了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值