我刚开始探索ES6 async/await
,我发现一些真正的惊喜me.Basically,forEach
表现异步而for
循环表现同步这里例如阵列在foreach是异步比较正常的循环
function getData(d) {
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve(d.x+" %%%% ")
},1000)
})
}
const data=[{x:"aaa"},{x:"bbb"}]
//async for loop
const makeRequest1 = async() => {
for (let i in data){
let value=data[i]
console.log(value)
value.p=await getData(value)
console.log(JSON.stringify(value)+ ' after')
}
// console.log(rr)
console.log(data)
console.log("Is it block ??")
return "done"
}
// { x: 'aaa' }
// {"x":"aaa","p":"aaa %%%% "} after
// { x: 'bbb' }
// {"x":"bbb","p":"bbb %%%% "} after
// [ { x: 'aaa', p: 'aaa %%%% ' }, { x: 'bbb', p: 'bbb %%%% ' } ]
// Is it block ??
// done
//async for loop
const makeRequest2 = async() => {
data.forEach(async (value)=>{
console.log(value)
value.p=await getData(value)
console.log(JSON.stringify(value)+ ' after')
})
console.log(data)
console.log("Is it block ??")
return "done"
}
// { x: 'aaa' }
// { x: 'bbb' }
// [ { x: 'aaa' }, { x: 'bbb' } ]
// Is it block ??
// done
// {"x":"aaa","p":"aaa %%%% "} after
// {"x":"bbb","p":"bbb %%%% "} after
makeRequest2().then((r)=>{
console.log(r)
})
我知道for
和forEach
版本应该同步运行,在这种情况下forEach
怎么会变成异步?
也许是因为在回调前的'async' ... – Weedoze
@Weedoze很有可能,是否有任何详细的解释 – Guigui
您是说您正在探索'async'和'await',然后阅读文档。这会给你解释 – Weedoze