약속은 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");
});
이것은 좋은 질문이다, 심지어 모든 응답을 읽은 후, 나는 ... 모범 사례에 대해 잘 모르겠어요
—
가브리엘 글렌
오해는 resolve ()로 정확히 종료하는 것에서 비롯된 것이라고 생각합니다. promise는 resolve ()를 호출 한 직후에 해결되지만 다른 사람들이 이미 말했듯이 약속을 종료 한 함수가 종료되었다는 의미는 아닙니다. 의무도 있으므로 "정상"종료에 도달 할 때까지 계속됩니다.
—
Giuseppe Bertone
resolve()
마술처럼 효과가있는 JS 제어문이return
아니라 함수 호출 일 뿐이며 실행이 계속됩니다.