>  기사  >  웹 프론트엔드  >  Promise 생성자 콜백은 동기식으로 실행되나요, 아니면 비동기식으로 실행되나요?

Promise 생성자 콜백은 동기식으로 실행되나요, 아니면 비동기식으로 실행되나요?

Linda Hamilton
Linda Hamilton원래의
2024-10-30 17:26:26693검색

Is the Promise Constructor Callback Executed Synchronously or Asynchronously?

Promise 생성자 콜백의 비동기 실행

질문:

다음 코드 조각에서:

<code class="python">function y(resolve, reject)
{
  console.log("Result");
  resolve();
}  

var promise = new Promise(y);</code>

y 함수는 비동기적으로 실행되나요, 아니면 동기적으로 실행되나요?

답변:

Promise 생성자 콜백의 실행은 특정 구현에 따라 다릅니다. Promises/A 사양의

ES6 사양의 섹션 25.4.3.1에는 다음과 같이 명시되어 있습니다.

"executor가 예외를 발생시키지 않으면 Promise 객체는 두 단계로 구성해야 합니다."

  1. 실행기 함수는 세 개의 인수를 사용하여 호출해야 합니다.

    • resolve(): 실행기가 호출할 수 있는 함수 약속을 이행하기 위해.
    • reject(): 실행자가 약속을 거부하기 위해 호출할 수 있는 함수.
    • this: 향후 사용을 위해 예약되어 있습니다.
  2. 실행자 함수는 동기식으로 반환되어야 합니다.

그러나 Promise에 대한 .then() 호출의 후속 실행은 항상 비동기식입니다. 이는 "PerformPromiseThen" 알고리즘을 설명하는 ES6 사양의 섹션 25.4.5.3.1에서 분명하게 드러납니다.

"Promise의 [[PromiseState]] 내부 슬롯 값이 "fulfilled"인 경우... "
"...Perform EnqueueJob("PromiseJobs", PromiseReactionJob, «fulfillReaction, value»)."

마찬가지로 Promise가 거부되면 알고리즘은 비동기 작업 대기열에 넣기를 수행합니다.

결론:

따라서 Promise 생성자에 전달된 함수는 동기적으로 실행되는 반면, 후속 .then() 호출은 ES6 사양에 따라 항상 비동기적으로 실행됩니다.

위 내용은 Promise 생성자 콜백은 동기식으로 실행되나요, 아니면 비동기식으로 실행되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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