先来一段代码
setLoading(true)
async function asyncFun() {
otherAsyncFun()
}
async function sequese(){
await asyncFun();
setLoading(false)
}
sequese()
这段代码的本意是,先执行asyncFun异步操作,等执行完成后,再执行setLoading(false),但是现象是,setLoading(false)比asyncFun提前执行。
后经测试发现,问题在于otherAsyncFun前面没有加await,async和await就相当于generator和yield,只有遇到yield的时候,代码才会暂停,而otherAsyncFun前面没有await,就会继续执行。
解释起来很简单,但背后是对async,await执行过程理解的不透彻。当在函数前面加了async,就表明这是一个异步函数,可以在内部使用await,除此之外,otherAsyncFun()就是一个普通的函数调用。await的意思是等待,表明会等待代码执行,并调用then将结果返回。当然,这里的等待,是指当前函数内部的等待,页面中其他代码会按顺序执行。
相关链接: juejin.cn/post/684490…