언어/Javascript & Typescript
배열 안의 원소들을 파라미터로 하는 Promise 체이닝하기
Octoping
2023. 4. 13. 13:56
배열의 원소들을 파라미터로 하는 Promise를 체이닝해야 하는 일이 있었다. 물론 async
와 await
을 활용하면 간단하게 구현할 수 있겠지만 함수 안에서 await을 사용할 경우 해당 함수가 async가 되어버리고 만다.
레거시 코드를 리팩토링하는 것이었기 때문에 이것이 어떤 영향을 끼칠지 무서워 다음과 같은 방식으로 작업하였다.
function waitAndLog(data) {
return new Promise((resolve) => {
setTimeout(() => {
console.log(data);
resolve();
}, 2000);
});
}
const dataArray = ['hello', 'world', 'and', 'javascript'];
function waitAndLogEverything() {
dataArray
.map((data) => () => waitAndLog(data))
.reduce((prev, curr) => prev.then(curr), Promise.resolve())
.then(() => console.log('Done!'));
}
/*
[Expected Output]
hello
world
and
javascript
Done!
*/