본문 바로가기

dev-log

[Javascript] Promise.all

Promise.all 메소드에 전달되는 인자는 Iterable<Thenable<T> | T> 타입의 값이다. 얼핏 보면 간단한 이 구문은 중요한 함의를 가진다. 자바스크립트 언어의 맥락 속에서 Promise 값 자체는 동시에 처리될 수 없다는 것이다.

 

이유는 실로 간단하다. 자바스크립트 코드는 싱글 스레드로 처리되기 때문이다. Worker나 Worklet은 엔진이 따로 격리되어 작동하지만 그 안에서 자바스크립트 언어는 여전히 싱글 스레드로 처리된다.

 

Promise.all에 배열을 넣고 await을 걸면 배열 안에 아이템이 동시에 처리되는 것처럼 보인다. 근데 Promise Constructor를 실행하는 것은 동기적으로 처리된다. 동시에 네트워크 처리를 하는 건 자바스크립트가 해주는 것이 아니라 자바스크립트를 둘러싼 런타임의 기능이다. 헷갈리지 말자!

 

 

'dev-log' 카테고리의 다른 글

Two Events  (0) 2025.01.06
[Granola] 001  (0) 2025.01.03
I/O와 리소스 스트림에 대한 단상  (0) 2024.12.04
[JavaScript] 자바스크립트의 배열  (0) 2024.12.03
URL과 프론트엔드 상태에 관한 짧은 생각  (2) 2024.11.30