是否可以编写一个异步生成器,如下所示:
function gen() {
return async function * () {
yield await ...
yield await ...
yield await ...
}()
}
所以可以像这样使用它,例如:
for (let val of await gen()) {
...
}
我真的不能理解这个结构的语义,异步生成器是如何在循环中使用的?
发布于 2018-10-20 06:32:29
在异步迭代提案完成之前,您可以从Redux-saga书(就像Cory Danielson提到的)中学习一页,并拥有一个适配器函数来执行所有异步/等待内容。
const later = async (delay, value) => {
return new Promise(resolve => {
setTimeout(() => resolve(value), delay);
});
};
function* rangePromise() {
for (let i = 2; i < 10; i++) {
let nextValue = yield later(100, i);
yield nextValue;
}
}
const forEachAsyncAdapter = async (iterator, ...callbacks) => {
try {
let next = iterator.next();
while (!next.done) {
while (!next.done && next.value && next.value.then) {
next = iterator.next(await next.value);
}
if (!next.done) {
await callbacks.reduce(
async (nextValue, callback) => {
nextValue = await callback(await nextValue);
return nextValue;
},
Promise.resolve(next.value)
);
next = iterator.next();
}
}
} finally {
if (typeof iterator.return === 'function') {
iterator.return();
}
}
};
forEachAsyncAdapter(
rangePromise(),
async i => { console.log(i); return Array(i).join('a'); },
async s => { console.log(s); return s.toUpperCase(); },
async s => { console.log(s); }
);
https://stackoverflow.com/questions/48101479
复制相似问题