javascript

동기 작업을 병렬로 처리하고 마지막 확인이 필요한 경우

개발하는 장군감 2022. 4. 5. 20:53

javascript는 일반적으로 비동기로 동작하기때문에, rest API를 사용해서 응답을 확인해야한다던가 하는 경우 동기식 처리로(async/await, promise, ...) 응답에 따른 동작을 하도록 구현할 수 있다.

그런데 만약 rest API를 여러번 호출하고 모든 응답을 받았을 때 어떤 동작을 하고싶다면?

as-is

async/await로 기능을 구현하여 사용중인데 모든 동작이 동기식으로 처리되다 보니 불필요한 wait time이 발생하여 프로그램 시간이 늦어지는 문제가 발생하였다.

await function A (API 호출 등, ...)
await function B
await function C
await function D
이후작업 ...

동기식 처리로 인한 불필요한 시간 지연

to-be

promise.all을 이용하여 순서가 상관없는 동기처리를 병렬로 수행하도록 한다.

await Promise.all([function A, function B, function C, function D])
이후 작업...

promise.all을 이용하여 동기식 일괄 처리를 하였을 때 결과

 

병렬 수행할 때 각 함수의 결과에 따른 동작을 위한 코드

await Promise.all([FUNCTIONS_ARRAY].map(p=>Promise.resolve(p).then(value => {
  console.log(value);
  //...
})
))

위와 같은 활용법으로 다양하게 적용가능하다. 
(REST API를 병렬로 호출하고 각 호출에 따라 특정 동작을 바로바로 할 수 있도록 한다던지..)

반응형