(Generator 函数、协程、async 函数)

协程

传统的编程语言,早有异步编程的解决方案(其实是多任务的解决方案)。其中有一种叫做”协
程”(coroutine),意思是多个线程互相协作,完成异步任务。

第一步,协程 A  开始执行。
第二步,协程 A  执行到一半,进入暂停,执行权转移到协程 B  。
第三步,(一段时间后)协程 B  交还执行权。
第四步,协程 A  恢复执行。

1.  function* asyncJob() {
2.  // ...其他代码
3.  var f = yield readFile(fileA);
4.  // ...其他代码
5.  }

上面代码的函数 asyncJob  是一个协程,它的奥妙就在其中的 yield  命令。它表示执行到此处,执
行权将交给其他协程。也就是说, yield  命令是异步两个阶段的分界线。
协程遇到 yield  命令就暂停,等到执行权返回,再从暂停的地方继续往后执行。它的最大优点,就是
代码的写法非常像同步操作,如果去除 yield  命令,简直一模一样。

async 函数

async 函数是什么?一句话,它就是 Generator 函数的语法糖。

一比较就会发现, async  函数就是将 Generator 函数的星号( *  )替换成 async  ,
将 yield  替换成 await  ,仅此而已。

async  函数对 Generator 函数的改进,体现在以下四点。

(1)内置执行器。

(2)更好的语义。

(3)更广的适用性。

(4)返回值是 Promise。

 

2021-05-21  17:45:10

posted @ 2021-05-21 17:45  铁打的代码流水的bug  阅读(75)  评论(0)    收藏  举报