developer tip

Javascript ES6 Promises가 해결 후에도 계속 실행되는 이유는 무엇입니까?

optionbox 2020. 10. 19. 07:58
반응형

Javascript ES6 Promises가 해결 후에도 계속 실행되는 이유는 무엇입니까?


약속은 resolve () 또는 reject () 할 수 있다는 것을 이해하지만 약속의 코드가 resolve 또는 reject가 호출 된 후에도 계속 실행된다는 사실을 알고 놀랐습니다.

나는 모든 즉각적인 함수 실행을 중단시키는 exit 또는 return의 비동기 친화적 버전 인 resolve 또는 reject를 고려했습니다.

누군가가 다음 예제가 해결 호출 후 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


JavaScript에는 "완료까지 실행" 이라는 개념이 있습니다. 오류가 발생하지 않는 한, return명령문 또는 그 끝에 도달 할 때까지 함수가 실행 됩니다. 함수 외부의 다른 코드는이를 방해 할 수 없습니다 (다시 오류가 발생하지 않는 한).

당신이 원하는 경우에 resolve()당신의 initialiser 기능을 종료하려면하여 앞에 추가해야합니다 return:

return new Promise(function(resolve, reject) {
    return resolve();
    console.log("Not doing more stuff after a return statement");
});

resolve약속을 할 때 호출되는 콜백 은 여전히 ​​사양에서 비동기 적으로 호출되어야합니다. 이는 동기 및 비동기 작업의 혼합에 대한 promise를 사용할 때 일관된 동작을 보장하기위한 것입니다.

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

JS 이벤트 루프에 제어권이 부여 된 후에 만 ​​콜백이 대기열에서 제거되고 실제로 호출 될 수 있습니다.

참고 URL : https://stackoverflow.com/questions/28896280/why-does-javascript-es6-promises-continue-execution-after-a-resolve

반응형