array.foreach中使用同步問題
阿新 • • 發佈:2021-01-07
array.foreach中使用同步問題
今天在寫課設的時候遇到了一個在foreach中使用await的問題。
首先我一開始獲取的是id列表,然後我想通過foreach的方式輪流用id查詢到物品資訊,為了保證我能讀取到資訊並賦值,我第一時間想到的是await的方式,讓他堵塞直到完成。
嘗試了下在 forEach函式中呼叫 await Promise() 方法,模仿非同步請求方法如下:
var a = [1,2,3];
a.forEach(item=>{
setTimeout(()=>{
console.log(‘111’);
},2000)
})
console.log(‘2222’);
結果:
發現並沒有按照我所想的每隔2秒輸出111,輸出3次以後,再是222
經過查閱資料後發現,實際forEach本身是非同步的,內部也是非同步的
兩種方法
方法一
複製程式碼
var arry = […];
Promise.all(arry.map(function(elem){
return new Promise(function(resolve, reject){
...
resolve(result);
})
})).then(function(data){
//在這就可以等所有的返回結果可以得到
})
複製程式碼
方法二
複製程式碼
var arry = […];
var counter = 0;
arry.forEach(function(elem){
//非同步回撥中
counter++;
if(counter === arr.length){
//在這執行所有執行的完後的
}
})
其實用for迴圈加上await也是可以的
這個的錢兩個方法引用的
https://www.cnblogs.com/ttjm/p/13065240.html