- forEachループ内で非同期関数を使用する方法:
async function processArray(array) {
array.forEach(async (item) => {
await doSomethingAsync(item);
console.log('処理完了: ' + item);
});
}
// 使用例
const myArray = [1, 2, 3, 4, 5];
processArray(myArray);
上記の例では、forEachメソッドのコールバック関数を非同期関数として定義しています。非同期関数内でawaitキーワードを使用して非同期処理が完了するのを待ちます。これにより、各要素の処理が順番に行われることが保証されます。
ただし、注意点として、forEachメソッドは非同期処理を待たずに次の要素に進むため、非同期処理の完了順序が保証されません。もし順序が重要な場合は、他の方法を検討してください。
- for...ofループとPromise.allを使用する方法:
async function processArray(array) {
for (const item of array) {
await doSomethingAsync(item);
console.log('処理完了: ' + item);
}
}
// 使用例
const myArray = [1, 2, 3, 4, 5];
processArray(myArray);
上記の例では、for...ofループを使用して非同期処理を行っています。awaitキーワードを使用することで、各要素の処理が順番に行われることが保証されます。
- Array.prototype.reduceを使用する方法:
async function processArray(array) {
await array.reduce(async (previousPromise, item) => {
await previousPromise;
await doSomethingAsync(item);
console.log('処理完了: ' + item);
}, Promise.resolve());
}
// 使用例
const myArray = [1, 2, 3, 4, 5];
processArray(myArray);
上記の例では、reduceメソッドを使用して非同期処理を行っています。各要素の処理が順番に行われることが保証されます。
これらの方法を使用することで、forEachループ内で非同期処理を制御し、処理の完了を待つことができます。ただし、上記の例では非同期処理が直列に実行されますが、並列実行が必要な場合は他の手法を検討する必要があります。