我正在我的逻辑中实现一个生成器,但我不清楚
function *generator {
yield synchronousFunc()
yield asyncFunc()
// should wait till asyncFunc() is completed
// before calling next yield
yield anotherSynchronousFunc()
yield ...
}
如果我将此 generator
转换为带有 async/await for 的 async generator
,它将如何工作
for await (const item of generator()) {}
当大部分 yield 是同步的。
async generator
将如何在幕后处理 yield 的同步部分?
也许这是一个愚蠢的问题,但我正在尝试了解生成器的工作原理
最佳答案
您应该在生成器前面放置一个 async
关键字以将其转换为异步生成器。
这是一个你可以运行的例子
async function* asyncGenerator() {
yield 1
yield 2
yield Promise.resolve(3)
yield 4
yield 5
}
(async () => {
for await (const n of asyncGenerator()) {
console.log(n)
}
})()
This resource帮助我培养了对生成器和异步生成器的直觉。
关于异步生成器如何在幕后工作,它与生成器关系不大,而与异步和等待有关。这是 async/await under the hood
除非您在 redux-saga 生成器中运行大量 CPU 密集型工作负载,否则即使您的大部分代码是同步的,您也不必担心异步生成器发生的额外 promise 包装。
关于javascript - 在异步生成器 JS 中处理同步流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62041213/