Promise 실행 순서 이해
JavaScript에서는 Promise를 사용하여 비동기 작업을 처리합니다. Promise 핸들러의 실행 순서는 특히 중첩된 Promise가 있는 경우 혼란스러울 수 있습니다.
코드의 라인별 분석
제공된 코드 라인을 분석해 보겠습니다. 실행 순서를 이해하려면 한 줄씩:
1. Promise.resolve('A')
.then(function(a){console.log(2, a); return 'B';})
.then(function(a){
Promise.resolve('C')
.then(function(a){console.log(7, a);})
.then(function(a){console.log(8, a);});
console.log(3, a);
return 'B';})
.then(function(a){
Promise.resolve('D')
.then(function(a){console.log(9, a);})
.then(function(a){console.log(10, a);});
console.log(4, a);})
.then(function(a){
console.log(5, a);});
-
1번째 줄: 'A'로 즉시 확인되는 Promise를 생성하고 여기에 .then() 핸들러를 연결합니다.
-
2번째 줄: Promise가 'A'로 해결되고 'B'를 반환하면 콘솔은 '2'를 기록합니다.
-
5번째 줄: 또 다른 .then() 핸들러는 1행에서 생성된 Promise에 추가됩니다.
-
6-8행: 'C'로 확인되는 새로운 Promise를 생성하고 두 개의 .then() 핸들러를 연결합니다. 해당 콘솔은 각각 '7'과 '8'을 기록합니다.
-
10행: 콘솔은 '3'을 기록하고 'B'를 반환합니다.
-
12행- 14: 또 다른 .then() 핸들러가 5행에서 생성된 Promise에 추가됩니다.
-
Line 15-17: 'D'로 확인되고 연결되는 새로운 Promise를 생성합니다. 콘솔에 '9'와 '10'을 각각 기록하는 두 개의 .then() 핸들러.
-
19행: 콘솔은 '4'를 기록합니다.
-
22행 -24: 또 다른 .then() 핸들러가 12행에서 생성된 Promise에 추가됩니다.
-
27행: Promise가 해결되면 콘솔은 '5'를 기록합니다.
실행 순서
-
1행: Promise 해결, 콘솔 로그 "2 A"
-
10행: 콘솔 로그 "3 B"
-
19행: 콘솔 로그 "4 B"
-
27행: 콘솔 로그 "5 정의되지 않음"
-
7행: 콘솔 로그 "7 C"
-
8행: 콘솔 로그 "8 정의되지 않음"
-
15행: 콘솔 로그 "9 D"
-
17행: 콘솔 로그 "10 정의되지 않음"
-
30행: 콘솔 로그 "1"
-
33행: 콘솔 로그 "6"
토론
- Promise 핸들러는 비동기식으로 예약되므로 현재 실행 스레드가 완료된 후에 실행됩니다.
- 중첩된 Promise는 미리 결정된 실행 순서가 없는 독립적인 Promise 체인을 생성합니다.
- Promise의 순서 Promise의 실행은 Promise 엔진의 구현에 따라 달라집니다. 이 경우 사용된 엔진은 매크로 작업(setTimeout())보다 먼저 마이크로 작업(약속 처리기)을 예약합니다.
- 중첩된 약속에 대해 특정 실행 순서에 의존하는 것은 권장되지 않습니다. 대신 체인 프라미스는 실행 순서를 명시적으로 제어합니다.
위 내용은 JavaScript에서 Promise 핸들러의 실행 순서는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!