async 函数能将 promise 链式调用的写法改成同步的写法。让代码变得更简洁易懂。es6 中的 async 是语法糖,我们自己可以实现类似 async 函数的功能。
下面是myAsync的代码:
1 | /** |
下面是测试用例:
1 | /** |
可以看出main函数内部写法和 es6 的 async 函数很相似,相当于将await替换成yield。
下面是 generator 中出现yield-delegation 中的测试。
1 | //这里依赖上面的 myAsync 和 request 方法 |
上面的 main 方法内yield*语句将yield委托给了 subTask 方法,并且subTask内 req4 的 promise 被 rejected。此时的 myAsync 还能正常运行。
下面是 generator 中出现递归委托的测试。
1 | //这里依赖上面的 myAsync 和 request 方法 |