ES6 には、イテレータを返すジェネレータがあります。
function* range(n) {
for (let i = 0; i < n; ++i) {
yield i;
}
}
for (let x of range(10)) {
console.log(x);
}
Promisesを返す非同期関数の提案があります。
async function f(x) {
let y = await g(x);
return y * y;
}
f(2).then(y => {
console.log(y);
});
この 2 つを組み合わせると、次のようになります。
async function* ag(n) {
for (let i = 0; i < n; ++i) {
yield i;
}
}
それは何を返しますか?ですかPromise<Iterator<Item>>
?Iterator<Promise<Item>>
? 他の何か?どのように消費するのですか?対応するループが必要だと思いfor
ます。結果を非同期に反復するものは次のようになります。
for (await let x of ag(10)) {
console.log(x);
}
次のアイテムにアクセスしようとする前に、各アイテムが利用可能になるのを待ちます。