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])
이후 작업...
병렬 수행할 때 각 함수의 결과에 따른 동작을 위한 코드
await Promise.all([FUNCTIONS_ARRAY].map(p=>Promise.resolve(p).then(value => {
console.log(value);
//...
})
))
위와 같은 활용법으로 다양하게 적용가능하다.
(REST API를 병렬로 호출하고 각 호출에 따라 특정 동작을 바로바로 할 수 있도록 한다던지..)
반응형