강의로 돌아가기
dididi

f2를 Promise.all로 풀어쓸때의 단점이 있을까요?

// f2()를 아래와 같이
function f2_1() {
  const list = [1,2,3,4]
  const res = await Promise.all(list.map(a => delayI(a * a)))
  log(res)
}

f2_1()                          // [1,4,9,16]

// 혹은 기존 f2()에서 리턴을 주고 호출시에
function f2_2() {
  const list = [1,2,3,4]
  return list.map(a => delayI (a * a))
}

const res = await Promise.all(f2_2())
log(res)                    // [1,4,9,16]

함수형의 다른 측면인 조합성등이 떨어지거나 할것 같은데 어떨까요? 😀

1 개의 답변
유인동

Promise.all 을 사용하는 것이 큰 단점이 있다고 생각하지는 않습니다. :)
굳이 이야기해도 좀 더 간결하게 표현할 수 있는데 복잡하게 표현되어야한다는 점 정도일거구요.

이미 잘 알고 계시겠지만 이 영상에서 강조한 것은
async/await 키워드만 알아서는 정확하게 동시성을 다룰 수 없다는 점을 전달하고자 했습니다.

위와 같은 상황에서 list.map 의 결과가 [Promise, Promise] 이게 되며,
그런 경우 await을 할 수 없고, 그러므로 Promise.all 같은 것을 잘 사용해야한다는점을 이야기하는 것이지여.
승기님이 보여주신 코드처럼 Promise라는 값에 대한 정확한 이해가 있어야 잘 다룰 수 있다. 라는 이야기를 전달하고자 했습니다.

질문을 위해 의사코드로 작성하셨기 때문에 생략하신거겠지만,
위 코드에서도 아래와 같은 async 함수를 만들어야 await 를 사용할 수 있겠습니다.

async function f2_1() {
  const list = [1,2,3,4];
  const res = await Promise.all(list.map(a => delayI(a * a)));
  log(res);
}

f2_1(); // [1,4,9,16]

function f2_2() {
  const list = [1,2,3,4];
  return list.map(a => delayI(a * a));
}

(async () => {
  const res = await Promise.all(f2_2());
  log(res); // [1,4,9,16]
}) ();
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.