lemooljiang avatar

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

lemooljiang

Published: 29 Oct 2019 › Updated: 29 Oct 2019async/await完美解决异步队列 / 网络研习社#46

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

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函数和普通函数写法差不多,没有太大的差异,但它却能解决异步的问题,是个相当完美的方案!

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

Written by

Designer , Poet , Technology enthusiasts

Read more #cn posts


Best Posts From lemooljiang

We have not curated any of lemooljiang's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From lemooljiang