没有从一个迁移到另一个的冲动,因为async
函数和co
库可以和平共存。
async
函数可以在co
生成器函数中使用,它们只是返回承诺的函数:
co.wrap(function* () {
yield asyncFn(1);
})()
.catch(console.error);
生成器函数可以在async
函数内部使用:
(async function () {
await co(genFn(1));
// for generator functions with no arguments, can also be
await co(genFn);
})()
.catch(console.error);
除了通过数百个生成器函数并将它们从 function*(...){ 更改为 async function(...){ 之外,还有什么方法可以使生成器与 async/await 一起工作?
考虑到生成器在应用程序中仅与 一起使用co
,因此可以自动替换它们。function*
和*
方法被替换为async
对应项,yield
并被yield*
替换为await
.
在此之前,应该进行一些初步的重构。从这个 yieldables 列表中只能使用 promises 和 generators 。并行执行(数组和对象)应分别替换为Promise.all
:
const results = yield [...];
至
const results = yield Promise.all([...]);