ecmascript-6 비동기를 - 왜 Javascript ES6 Promises가 해결 후 실행을 계속합니까?





순서 설명 (3)


JavaScript는 "실행 완료"라는 개념을 가지고 있습니다. 오류가 발생하지 않는 한 함수는 return 문이나 끝에 도달 할 때까지 실행됩니다. 함수 밖의 다른 코드는 오류를 일으킬 수 없습니다 (오류가 발생하지 않는 한).

resolve() 를 사용하여 이니셜 라이저 함수를 종료하려면 return 하여 앞에 추가해야합니다.

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

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

나는 비상업적 인 버전의 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




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

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

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




  1. 단항 + 주어진 문자열이 숫자로 변환됩니다.
  2. 문자열을 변환하고 1 씩 증가시키는 연산자 증가
  3. [] == ''. 빈 문자열
  4. + ''또는 + []는 0을 평가합니다.

    ++[[]][+[]]+[+[]] = 10 
    ++[''][0] + [0] : First part is gives zeroth element of the array which is empty string 
    1+0 
    10
    




javascript promise ecmascript-6 es6-promise