私は決して(intentionaly!)javascriptで非同期関数で作業したことがありません。 配列の要素(つまりfor(let i=0;i<array.length;i++){do_Something_Async_here()}
)に非同期関数を使用してPARALLELで処理する必要がある代入を行う必要があります。javascriptで配列ループの非同期関数を作成しますか?
私はこの
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
});
ようにsetTimeoutを使って試してみましたが、私はここでそれを簡略化してきました。 今、コードを実行すると、どちらの場合でも、私は通常Cまたはjavaでコードを実行しているようです。逐次的に。私は何が欠けていますか?それらを並行して実行するには? ありがとうございます。
'populateResults'は非同期関数ではありません。普通の関数なので、名前には約束が含まれていないにもかかわらず' promises'にプッシュする前に完全に実行されます。 'Promise'を返す実際の非同期関数でもう一度やり直してください。別の結果が出るかもしれません。 – Duncan
閉鎖を試みましたか?例:https://jsfiddle.net/8n00zre7/ – Kirill
SimpleJの答えを見てくださいhttps://stackoverflow.com/questions/24924038/iterate-over-array-running-async-task-on-each-element彼は ' setTimeout() ' –