因爲async
函數和co
library可以和平共處,所以不需要從一個移植到另一個。
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);
除了要去雖然數百個生成器函數,並將它們從函數*(...){更改爲異步函數(...){,如何將它們更改爲 lse可以使發生器 與async/await一起工作嗎?
考慮到應用程序中使用的發生器只能與co
一起使用,它們可以以自動方式進行替換。將function*
和*
方法替換爲async
對應部分,將yield
和yield*
替換爲await
。
在此之前,應該做一些初步的重構。 this list of yieldables只能使用承諾和生成器。並行執行(陣列和對象)應該與相應Promise.all
取代:
const results = yield [...];
到
const results = yield Promise.all([...]);
僅供參考,'async/await'不是ES7的一部分。 –
另外,如果你想重寫大部分的代碼庫,請考慮使用一個工具來做到這一點,如果可能的話:https://github.com/facebook/jscodeshift(免責聲明:我寫了它) –
遷移的原因是什麼? –