AI 보이는 추론 실험실

Promise.all의 결과는 먼저 끝난 작업부터 놓일까?

프라미스 올의 입력 순서와 작업이 끝나는 순서를 따로 바꾸어, AI가 반환 배열의 위치를 어떻게 읽어야 하는지 시험합니다.

탐구게시 2026-10-20읽기·실험 약 8분확인 문제 2개규칙 기반 실행한국논리학협회 자체 제작제작·검수 LTCT 편집부

저녁 도서관 책상에서 세 작업 카드를 배열하는 노년 여성과 카드 쪽을 바라보는 작은 공식 올리
학습 장면을 표현한 AI 생성 이미지입니다. 사진의 표시와 자료는 실제 측정·운영 기록이 아닙니다. · 주제 이해를 돕기 위한 AI 생성 이미지 · LTCT 자체 제작
오늘의 질문

A·B·C 순서로 묶은 작업이 B·C·A 순서로 성공하면 Promise.all의 반환 배열도 B·C·A가 될까요?

입력 A·B·C와 완료 B·C·A를 서로 다른 줄에 놓고 성공 반환 배열은 입력 위치 A·B·C를 따른다고 표시한 관계도
입력 A·B·C와 완료 B·C·A를 서로 다른 줄에 놓고 성공 반환 배열은 입력 위치 A·B·C를 따른다고 표시한 관계도 · 한국논리학협회 자체 제작
그림 크게 보기 ↗
01

시작할 때의 위치와 끝난 시각을 구별합니다

AI가 세 자료를 동시에 조회하는 코드를 설명한다고 합시다. 입력 목록에는 A·B·C가 놓였지만 응답은 B·C·A 순서로 왔습니다. 자바스크립트의 프라미스(Promise, 나중의 성공 값이나 실패를 나타내는 객체)를 묶는 프라미스 올(Promise.all)은 모두 성공하면 입력 위치에 맞춘 결과 배열을 제공합니다.

따라서 Promise.all([작업A, 작업B, 작업C])의 성공 결과는 [A의 값, B의 값, C의 값]입니다. 먼저 끝난 B가 첫 칸으로 이동하지 않습니다. 반환 배열의 첫 항목만 보고 ‘이 작업이 가장 빨랐다’고 설명하면 위치와 완료 순서를 혼동한 것입니다.

02

브라우저에서 세 프라미스를 직접 완료시킵니다

활동은 외부 서버를 호출하지 않습니다. 브라우저 안에 실제 프라미스 세 개를 만들고, 선택한 순서대로 성공 또는 실패시킵니다. 입력 순서와 완료 처리 순서를 따로 선택한 뒤 실행하세요. 완료 기록은 처리 순서를 보여 주고, 성공 결과는 입력 위치를 따릅니다.

기본값은 입력 A·B·C, 완료 B·C·A, 모두 성공입니다. 결과 배열은 A값·B값·C값이고 완료 기록은 B성공·C성공·A성공입니다. 입력만 C·A·B로 바꾸면 반환 배열은 C값·A값·B값이 됩니다. 같은 완료 순서에서도 배열 위치가 달라지는지 확인하세요.

03

배열 위치를 실제 자료 이름에 대응시킵니다

입력 목록을 C·A·B로 바꾼 뒤 결과의 첫 항목을 여전히 A의 값이라고 이름 붙이면 잘못된 자료를 연결하게 됩니다. 입력을 만드는 코드와 반환 배열을 읽는 코드를 함께 살펴야 합니다. 완료 속도가 달라진다는 이유로 위치 대응을 바꾸거나, 입력 목록이 바뀌었는데 예전 대응을 유지하는 두 경우를 구별하세요.

각 작업의 값에 자료 이름을 함께 넣으면 결과를 확인하는 데 도움이 됩니다. 활동도 단순한 숫자 대신 A값·B값·C값을 반환하여 대응을 드러냅니다. 실제 업무에서는 이 이름이 서로 구별되는지, 반환 자료의 이름이 요청한 자료와 맞는지도 확인해야 합니다. 배열 위치를 보존한다는 언어 규칙이 자료 내용의 정확성까지 보장하지는 않습니다.

04

하나가 실패했을 때도 범위를 확인합니다

B를 실패로 정하면 Promise.all 전체는 B의 실패로 거부됩니다. 성공 결과 배열을 받은 것처럼 일부 값을 나열할 수 없습니다. 활동은 이후 A·C의 처리도 계속하여 별도 기록에 보여 줍니다. 전체 거부가 다른 작업의 자동 취소를 뜻하지 않는다는 점을 관찰할 수 있습니다.

이 모형의 완료 순서는 사용자가 정합니다. 실제 네트워크 속도나 병렬 처리 성능을 측정하지 않습니다. AI가 코드를 설명할 때는 입력 목록, 각 항목과 결과 위치의 대응, 성공·실패 처리, 취소 장치가 있는지를 나누어 확인해야 합니다. 이번 활동은 프라미스의 외부 효과를 실행하지 않습니다.

직접 확인하기 · 규칙 기반 실행

입력 순서와 완료 처리 순서 바꾸기

기본 조건으로 실행하여 입력 순서·완료 기록·반환 배열 세 줄을 비교합니다. 완료 순서는 유지하고 입력만 CAB로 바꿔 다시 실행합니다. B 실패를 선택해 전체 결과와 나머지 완료 기록을 확인한 뒤 초기화합니다.

조건을 바꾸어 직접 확인하기

조건을 선택한 뒤 실행 버튼을 누르세요. 입력을 바꾸면 이전 실행 결과는 지워집니다.

관계를 읽고, 다른 상황에 적용하기

두 문제로 생각 확인

1입력 A·B·C, 모두 성공, 완료 C·B·A이면 반환 배열의 첫 값은?
2B 실패로 Promise.all이 거부되었다면 확정할 수 있는 것은?

두 문제의 답을 모두 선택하면 해설을 볼 수 있습니다.

나의 설명으로 마무리

오늘 발견한 관계

0 / 4,000자

메모는 현재 기기의 브라우저에만 보관됩니다. 계정이나 다른 기기에는 동기화되지 않습니다.

출처와 제작 안내

원문을 참고해 설명·도표·문항·실험을 새로 작성했습니다. 별도 표시가 없는 사례와 수치는 학습을 위한 가상 예시입니다. 원문 번역이나 실제 모델의 성능 평가 자료가 아닙니다.

  1. Promise.all의 결과 위치 ↗Ecma International / TC39ECMAScript 2025 §27.2.4.1.2–3 PerformPromiseAll / Resolve Element Functions

    입력 위치를 저장하고 values[index]에 이행 값을 놓는 절차와 거부 처리를 확인. A·B·C 가상 작업은 자체 구현.