왜 Javascript ES6 Promises가 해결 후 실행을 계속합니까?



Answers

약속을 resolve 때 호출 될 콜백은 스펙이 비동기 적으로 호출되도록 요구됩니다. 이는 동기 및 비동기 작업을 혼합하여 약속을 사용할 때 일관된 동작을 보장하기위한 것입니다.

따라서 resolve 를 호출하면 콜백이 대기 하고 resolve() 호출 다음의 모든 코드에서 즉시 함수 실행이 계속됩니다.

일단 JS 이벤트 루프가 되돌아온 경우에만 콜백을 대기열에서 제거하고 실제로 호출 할 수 있습니다.

Question

내가 알기로 약속은 해결할 수있는 것 ()이나 거부 () 할 수있는 것이지만, 결의안이나 거절이 발부 된 후에도 약속의 코드가 계속 실행된다는 사실에 놀랐습니다.

나는 비상업적 인 버전의 exit 나 return을 해결하거나 거부하는 것을 고려했다. 즉, 즉각적인 모든 함수 실행을 중단했다.

누군가 다음의 예제가 때때로 해결 호출 후에 console.log를 보여주는 이유에 대한 설명을 해줄 수 있습니까?

var call = function() {
    return new Promise(function(resolve, reject) {
        resolve();
        console.log("Doing more stuff, should not be visible after a resolve!");
    });
};

call().then(function() {
    console.log("resolved");
});

jsbin




Related