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 |