javaScript를 이해하는 데 문제가 promises
있습니다. 다음 코드를 작성했습니다.
var p = new Promise(function(resolve,reject){
reject(Error("hello world"));
});
setTimeout(()=>p.catch(e=>console.log(e)),5000);
Chrome 개발자 콘솔에서 바로 이것을 볼 수 있습니다.
그러나 5 초 정도 기다린 후이 이미지와 같이 메시지가 자동으로 검은 색으로 바뀝니다.
JavaScript 코드와 개발자 콘솔간에이 동작을 본 적이 없습니다. 여기서 JavaScript 코드가 개발자 콘솔에서 "기존 컨텐츠를 수정할 수 있습니다".
그래서이 resolve
코드를 작성 하여 동일한 상황이 발생하는지 확인하기로 결정했습니다 .
var p = new Promise(function(resolve,reject){
resolve("hello world");
});
setTimeout(()=>p.then(e=>console.log(e)),5000);
그러나이 상황에서 개발자 콘솔은 5 초 후에 아무것도 표시하지 않고 인쇄합니다 hello world
.
resolve
및 reject
호출 시점 과 관련하여 왜 다르게 취급됩니까?
특별한
나는 또한이 코드를 썼다 :
var p = new Promise(function(resolve,reject){
reject(Error("hello world"));
});
setTimeout(()=>p.catch(e=>console.log("errors",e)),5000);
setTimeout(()=>p.catch(e=>console.log("errors 2",e)),6000);
setTimeout(()=>p.catch(null),7000);
이로 인해 개발자 콘솔에 여러 출력이 발생합니다. 시간 0에 빨간색 오류가 발생하고 텍스트가 5 초에 빨간색으로 바뀌고 errors hello world
6 초에 새 오류 메시지 가 나타난 후 errors 2 hello world
7 초에 빨간색 오류 메시지가 나타납니다. 이제는 reject
실제로 몇 번이나 호출 되는지에 대해 매우 혼란스러워합니다 .... 나는 길을 잃었습니다 ...
var p = new Promise(function(resolve,reject){ reject(Error("hello world")); });
더 관용적이고 간결하게 다음과 같이 쓸 수 있습니다var p = Promise.reject(Error("hello world"));
:-)