일반적인 Generator와 비슷하지만 조금 차이가 있다.
Symbol.Iterator
를 갖는 Generator와 달리 Symbol.asyncIterator
메소드를 갖는다.next()
메소드가 일반적인 값을 반환하는 Generator와 달리 promise를 반환한다.for await...of
구문을 통해 순회할 수 있다.const asyncRange = {
from: 5,
to: 1,
async *[Symbol.asyncIterator]() {
for (let value = this.from; value <= this.to; value++) {
await new Promise(res => setTimeout(res, 1000));
yield value;
}
}
};
for await(let value of asyncRange) {
console.log(value);
}
Symbol.asyncIterator
메소드를 갖는다.next()
메소드를 갖고 Promise
를 리턴한다.for await…of
구문을 통해 순회 가능하여 하단에 1초마다 value가 찍힌다.보강해보기. ⇒ 코드스피츠 non-blocking javascript보고서