1. 程式人生 > 其它 >array.foreach中使用同步問題

array.foreach中使用同步問題

技術標籤:jsjswebes6

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