MDN 说 for await...of
有两个用例:
该
for await...of
语句创建一个循环,循环遍历异步可迭代对象以及同步可迭代对象,...
我以前知道前者:使用异步可迭代Symbol.asyncIterator
。但是我现在对后者感兴趣:同步可迭代。
以下代码在一个同步可迭代对象(一个promise数组)上进行迭代。它似乎阻碍了每个诺言的实现。
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
同步可迭代对象的描述是否正确,如果可以,那么该模式会产生未处理的拒绝错误是否重要?