수색…
소개
async
함수는 약속을 반환하는 함수입니다. 약속이 해결 될 때까지 호출자에게 수익을 await
결과를 계속합니다.
반복자를 사용하면 for-of
루프 for-of
통해 컬렉션을 반복 할 수 있습니다.
비동기 반복자는 각 반복이 for-await-of
루프 for-await-of
사용하여 for-await-of
수있는 약속 인 컬렉션입니다.
비동기 반복자는 3 단계 제안 입니다. 크롬 카나리아 60에 - --harmony-async-iteration
통사론
- 비동기 함수 * asyncGenerator () {}
- yield는 asyncOperationWhichReturnsAPromise ()를 기다리고 있습니다.
- for await (asyncGenerator () 결과) {/ * 결과는 약속의 해결 된 값입니다. * /}
비고
기초
JavaScript Iterator
는 value : <any>
이고 done : <boolean>
인 객체 인 IteratorItem
을 반환하는 .next()
메소드가있는 객체입니다.
JavaScript AsyncIterator
는 다음 값에 대한 약속 인 Promise<IteratorItem>
을 반환하는 .next()
메서드가있는 객체입니다.
AsyncIterator를 만들려면 비동기 생성기 구문을 사용할 수 있습니다.
/**
* Returns a promise which resolves after time had passed.
*/
const delay = time => new Promise(resolve => setTimeout(resolve, time));
async function* delayedRange(max) {
for (let i = 0; i < max; i++) {
await delay(1000);
yield i;
}
}
delayedRange
함수는 최대 수를 취하고 1 초 간격으로 0에서 해당 숫자까지의 수를 생성하는 AsyncIterator
반환합니다.
용법:
for await (let number of delayedRange(10)) {
console.log(number);
}
for await of
loop는 비동기 함수의 내부에서만 사용할 수있는 새로운 구문의 일부이며 비동기 생성자입니다. 루프 내에서 산출 된 값 (Promises라는 것을 기억하십시오)은 풀 렸으므로 약속이 숨겨집니다. 루프 내에서 직접 값 (생성 된 숫자)을 처리 할 수 for await of
루프를 기다리는 동안 사용자를 대신하여 약속이 대기합니다.
위 예제는 9 초를 기록 할 때까지 1 초, 로그 0, 또 다른 초, 로그 1 등 for await of
, AsyncIterator
가 done
되면 for await of
루프 for await of
가 종료됩니다.