💠프로그래밍 언어/JavaScript
[심화] 비동기 함수의 반복문은 어떻게 사용할까?
튤
2024. 8. 5. 10:25
728x90
비동기 함수의 반복문
forEach( )
⸰ 동기적으로 동작, 비동기 함수를 기다리지 않음
⸰ try/catch 가능
⸰ 간단한 동기 반복 작업에 사용
const func = async () => {
await Promise.all(data.map(async (i) => {
await insertDatabase(i);
}));
};
비동기 작업의 완료를 보장하지 않으므로, Promise.all을 사용하여 병렬 처리
for
⸰ 동기적으로 동작, 비동기 함수를 기다리지 않음
⸰ 조건식, 초기화식, 후위식 설정 가능하여 유연하게 반복 제어
const func = async () => {
for (let i = 0; i < data.length; i++) {
await insertDatabase(data[i]);
}
};
비동기 작업을 순차적으로 처리
for ... of
⸰ 동기적으로 동작, 비동기 함수를 기다리지 않음
⸰ try/catch 가능
⸰ 배열이나 이터러블 객체 순회에 사용
const func = async () => {
for (let i of data) {
await insertDatabase(i);
}
};
비동기 작업을 순차적으로 처리
for ... in
⸰ 동기적으로 동작, 비동기 함수와 무관하게 동작
⸰ 객체 속성을 순회할 때 사용
const func = async () => {
for (let i in data) {
await insertDatabase(data[i]);
}
};
객체의 속성을 순회하며, 배열에서는 인덱스를 통해 접근
for await ... of
⸰ 비동기적으로 동작, await 키워드를 사용하여 비동기 작업이 완료될 때까지 기다림
⸰ 비동기 이터러블 객체(ex 비동기 생성기)를 순회할 때 사용
const func = async () => {
for await (let i of data) {
await insertDatabase(i);
}
};
비동기 이터러블 객체나 배열의 비동기 작업을 순차적으로 처리
Promise.All( )
⸰ 비동기적으로 동작, 여러 비동기 작업을 병렬로 실행 후 모든 Promise가 해결되면 결과를 반환
⸰ 한 작업이라도 실패하면, 전체가 실패로 처리됨
⸰ 여러 비동기 작업을 병렬로 실행하고, 모두 완료된 후 결과를 처리할 때 사용
const func = async () => {
await Promise.all(data.map(async (i) => {
await insertDatabase(i);
}));
};
비동기 작업을 병렬로 처리
728x90