谢邀。我刚看了你的截图,你第一个截图使用的是Promise.then,然后第二个截图使用的是asyn await,要搞清楚为什么第一个loading不生效,第二个生效,就要搞清楚这两者之间的区别。不论是Promise还是async await,他们都是解决异步回调地狱的方法。说道异步,可能大家第一反应会想到setTimeout,现在我用setTimeout来代替这两者来说明两者的区别。对于第一张图的Promise, 改成setTimeout就变成了这样this.roleUserLoading = true setTimeout(() =>{ console.log('这里相当于Promise.then') },1000) this.roleUserLoading = false对于第二张图的async await, 改成setTimeout就变成了这样this.roleUserLoading = true setTimeout(() =>{ console.log('这里相当于await') this.roleUserLoading = false },1000)对比上面的代码,我们会发现this.roleUserLoading一个在setTimeout外面,一个在里面,在外面的因为setTimout是异步的,所以首先会执行this.roleUserLoading = true this.roleUserLoading = false然后在1秒后才执行setTimeout的内容,而上面改变roleUserLoading的值是瞬间完成的,所以看不到loading现在再说一下async await,await后面的代码都会等待await调用的异步执行完之后再执行,就相当于把await后面的所有代码都放到了setTimeout里面了,这时候loading就必须等待setTimeout被调用执行之后才会被关闭。你明白了吗?那如何在promise上面也可以用loading呢,我们可以像下面代码这样promise.then(() => {}).finally(() =>{ this.roleUserLoading = false })如果觉得有用,麻烦给我一个赞,谢谢,同时也可以关注我的公众号【前端有的玩】,拉你进前端交流群,一起学习前端技术。
谢邀。
我刚看了你的截图,你第一个截图使用的是
Promise.then
,然后第二个截图使用的是asyn await
,要搞清楚为什么第一个loading
不生效,第二个生效,就要搞清楚这两者之间的区别。不论是
Promise
还是async await
,他们都是解决异步回调地狱的方法。说道异步,可能大家第一反应会想到setTimeout
,现在我用setTimeout
来代替这两者来说明两者的区别。对于第一张图的
Promise
, 改成setTimeout
就变成了这样对于第二张图的
async await
, 改成setTimeout
就变成了这样对比上面的代码,我们会发现
this.roleUserLoading
一个在setTimeout
外面,一个在里面,在外面的因为setTimout
是异步的,所以首先会执行然后在1秒后才执行
setTimeout
的内容,而上面改变roleUserLoading
的值是瞬间完成的,所以看不到loading
现在再说一下
async await
,await
后面的代码都会等待await
调用的异步执行完之后再执行,就相当于把await
后面的所有代码都放到了setTimeout
里面了,这时候loading
就必须等待setTimeout
被调用执行之后才会被关闭。你明白了吗?那如何在
promise
上面也可以用loading
呢,我们可以像下面代码这样如果觉得有用,麻烦给我一个赞,谢谢,同时也可以关注我的公众号【前端有的玩】,拉你进前端交流群,一起学习前端技术。