Promise.map 은 안전한가?
2 min readOct 1, 2020
동시성의 함정
Promise.all 파라미터에
Array.map 을 이용해 여러 비동기 함수를 처리하는 경우가 꽤 있다.
본인의 경우는 bluebird 의 Promise.map 메소드를 통해 매우 편리하게 사용하고 있다.
그런데 매우 큰 볼륨의 비동기작업을 해당 방식으로 사용할 때,
늘 유의하는 점이 있다.
1. 개별 비동기 함수는
서로 영향을 끼치지 않는 형태로 설계가 되어있어야 한다.
2. 개별 비동기 함수가 재선언을 반복할 경우, 순서의 보장을 위해서는 따로 작업이 필요하다. (개인적으로는 해당 방식을 사용하지 않는다.)
2번 이슈를 해결하기 위해,
개인적으로 각 비동기의 결과값들을 Array에 넣어서 리턴하는 방식을 사용하고 있다.
그런데 해당 방식으로 사용했을 때,
“특정 비동기의 결과값의 push동작이 일어나지 않는다. (씹힌다)” 라는
상황이 발생하지 않을까 우려가 생겼고,
테스트를 해보기 위해 아래 코드를 작성했다.
*간편하게 작성하기 위해, Promise.map 과 Promise.delay를 사용하였습니다.
결과는?
무려 이상이 없다.
안전하게 사용하시라.
만약 사용 중 이상이 있다면
비동기 처리 방식보다,
비동기 함수의 내부 로직 등에서 발생하고 있다고 추측하는 것이 좋다.