async/await完美解决异步队列 / 网络研习社#46

lemooljiang(76)
Published in
#cn
Words
393
Reading
2 min
Listen
Play
7y

async.jpg

在JavaScript中几乎所有的函数都是异步的,这有好处,但也引起了一些问题。比如,如何保证异步函数按顺序执行呢?

举个例子,有三个任务:A, B , C ,因为是异步函数,所以JS几乎会同时调用这三个函数,谁先执行完,谁后执行完并不知道。如果是不相关的三件事倒还好,如果你需要它们顺序执行的话,那可要费点劲了。

前面我提到Promise的解决方案,A -> B -> C ,它有专门的 .then的用法,有点类似这样:

Promise{
(A is done)
}
.then(B is done)
.then(C is done)



这种用法还不错,但还有一种更好的方案,那就是async/await异步队列!用它写的话是这样的:

async
  await (A is done)
  await (B is done)
  await (C is done)



这种写法更符合人的思维逻辑,更容易理解。async函数还比较新,webpack打下包也能用的。用它来写队列真是一个完美的方案。

多个异步任务用async/await来解决是个完美的方案,前提是这些异步任务都要用Promise包装一下,要有一个明确的结束点,否则谁也没法知道结束的时间点。

promise.jpg

完成了promise函数的封装,把它们丢进async函数中就行啰。

async function main(){
   await A
   await B
   await C
}
main()
//A,B,C 都是Promise函数,它们将按顺序执行

async函数和普通函数写法差不多,没有太大的差异,但它却能解决异步的问题,是个相当完美的方案!

async/await完美解决异步队列 / 网络研习社#46 | Ecency