>  기사  >  웹 프론트엔드  >  JavaScript에서 Promise 핸들러의 실행 순서는 무엇입니까?

JavaScript에서 Promise 핸들러의 실행 순서는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-24 17:42:02731검색

What is the Execution Order of Promise Handlers in JavaScript?

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. 1행: Promise 해결, 콘솔 로그 "2 A"
  2. 10행: 콘솔 로그 "3 B"
  3. 19행: 콘솔 로그 "4 B"
  4. 27행: 콘솔 로그 "5 정의되지 않음"
  5. 7행: 콘솔 로그 "7 C"
  6. 8행: 콘솔 로그 "8 정의되지 않음"
  7. 15행: 콘솔 로그 "9 D"
  8. 17행: 콘솔 로그 "10 정의되지 않음"
  9. 30행: 콘솔 로그 "1"
  10. 33행: 콘솔 로그 "6"

토론

  • Promise 핸들러는 비동기식으로 예약되므로 현재 실행 스레드가 완료된 후에 실행됩니다.
  • 중첩된 Promise는 미리 결정된 실행 순서가 없는 독립적인 Promise 체인을 생성합니다.
  • Promise의 순서 Promise의 실행은 Promise 엔진의 구현에 따라 달라집니다. 이 경우 사용된 엔진은 매크로 작업(setTimeout())보다 먼저 마이크로 작업(약속 처리기)을 예약합니다.
  • 중첩된 약속에 대해 특정 실행 순서에 의존하는 것은 권장되지 않습니다. 대신 체인 프라미스는 실행 순서를 명시적으로 제어합니다.

위 내용은 JavaScript에서 Promise 핸들러의 실행 순서는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.