배열의 원소들을 파라미터로 하는 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!
*/
'언어 > Javascript & Typescript' 카테고리의 다른 글
함수의 파라미터를 리터럴로 받는 방법과 응용 (0) | 2023.08.22 |
---|---|
레거시 프론트엔드 프로젝트 점진적으로 개선하기 (0) | 2023.04.13 |
CDN에서 받아온 js에 타입 넣기 (0) | 2023.04.13 |
자바스크립트로 난수 만들기 (0) | 2022.09.06 |
현재 날짜를 원하는 포맷으로 출력하기 (2) | 2022.06.21 |