一つの方法:
var notProcessed = ['a', 'b', 'c'];
function processThem(company) {
// Example long process
return new Promise((resolve) => {
setTimeout(() => resolve(company), 500);
});
}
function processArrayAsync(notProcessed) {
var companies = [];
var promise = Promise.resolve();
for(let next of notProcessed) {
promise = promise
.then(() => processThem(next))
.then(company => companies.push(company));
}
return promise.then(() => companies);
}
processArrayAsync(notProcessed).then(console.log);
そして、より良い方法はES6でasync
機能
var notProcessed = ['a', 'b', 'c'];
async function processThem(company) {
// Example long process
return new Promise((resolve) => {
setTimeout(() => resolve(company), 500);
});
}
async function processArrayAsync(notProcessed) {
var companies = [];
for(let next of notProcessed) {
let res = await processThem(next);
companies.push(res);
}
return companies;
}
processArrayAsync(notProcessed).then(console.log);
を新たに使用している私は本当に非同期操作を処理する。この第二の方法のように:)
'processThem()'に非同期コードがある場合、promise配列を作成する必要がありますが、promiseを配列にプッシュするために約束を返すには 'processThem()'が必要です。次にpromiseの配列に 'Promise.all()'を使います。 – charlietfl
'processThem()'のサンプルコードを表示します。 – charlietfl
'空の配列を受け取ります' - いいえ、あなたは 'notProcessed'配列の中の配列の値はすべて 'undefined 'であるか、' processThem'が返すものは –