MDN에 따르면 for await...of
두 가지 사용 사례가 있습니다.
이
for await...of
명령문은 비동기 반복 가능 오브젝트와 동기화 반복 가능 오브젝트를 반복하는 루프를 작성합니다.
나는 이전을 알고 있었다 : async iterables using Symbol.asyncIterator
. 그러나 나는 이제 후자에 관심이있다 : 동기 iterables.
다음 코드는 동기식 iterable-약속 배열을 반복합니다. 각 약속의 성취에 대한 절차를 막는 것으로 보입니다.
async function asyncFunction() {
try {
const happy = new Promise((resolve)=>setTimeout(()=>resolve('happy'), 1000))
const sad = new Promise((_,reject)=>setTimeout(()=>reject('sad')))
const promises = [happy, sad]
for await(const item of promises) {
console.log(item)
}
} catch (err) {
console.log(`an error occurred:`, err)
}
}
asyncFunction() // "happy, an error occurred: sad" (printed in quick succession, after about 5 seconds)
이 동작은 아래 표시된 논리에 따라 차례대로 각 약속을 기다리는 것과 같습니다. 이 주장이 맞습니까?
이 코드 패턴이 암시 적 거부 와이어 업 함정이 있기 때문에 물어 Promise.all
및 Promise.allSettled
피하고을하고,이 패턴이 명시 적으로 언어에 의해 지원 될 것이라고 나에게 이상한 것 같다.
for await... of
동기 이터 러블에 대한 설명은 정확합니까? 그렇다면 패턴이 처리되지 않은 거부 오류를 발생시킬 수 있는가?