(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

浙公网安备 33010602011771号