我從來沒有(有意!)在javascript中使用異步函數。 我必須做一個任務,要求我使用數組元素的異步函數(即for(let i=0;i<array.length;i++){do_Something_Async_here()}
)在PARALLEL中處理它們。在javascript中爲數組循環創建異步函數?
我一直在使用的setTimeout這樣
unique.forEach(function (number, index)
{
setTimeout(populateResults(index,number), 0);
});
function populateResults(index,number)
{
alert("populating results: index:"+index+" number:"+number);
var jp;
for(var i=0;i<1000000;i++)
{
jp=Math.pow(2,100);
}
alert("results populated: index:"+index+" number:"+number);
return jp;
}
像這樣
let promises = [];
for (var i=0;i<unique.length;i++) {
promises.push(populateResults(i,unique[i]));
}
Promise.all(promises).then(function(results){
console.log(results);
}).catch(function(err) {
// handle error here
});
其實我做的數量和索引的東西試過,但我在這裏簡化它。 現在,當我運行代碼時,在這兩種情況下,似乎我通常在C或java中執行代碼。順序。我錯過了什麼?如何讓他們平行運行? 在此先感謝。
'populateResults'不是一個異步函數,它只是一個普通的函數,所以它會在你把它推入'promises'之前完全執行,儘管它的名字不包含任何promise。用一個返回'Promise'的實際異步函數再試一次,你可能會看到不同的結果。 – Duncan
你嘗試關閉了嗎?例如:https://jsfiddle.net/8n00zre7/ – Kirill
看看SimpleJ的答案在這裏https://stackoverflow.com/questions/24924038/iterate-over-array-running-async-task-on-each-element他使用' setTimeout()' –