올바르게 기억한다면 Promise.catch()를 사용하여 오류를 처리 할 수 있도록 항상 약속이 throw되므로 오류가 발생합니다. 아무런 예외도 기억하지 못합니다. 그러나 내부에서 오류가 발생하면 setTimeout()
이 작동하지 않습니다.약속 잡기 오류가 올바르게 발생하지 않습니다. NodeJS
왜 이것이 작동하지 않는지 설명 할 수 있습니까? 아니면 단순히 NodeJS의 버그입니까?
는 약속 함수의 실제 실행에 비동기 실행하기 때문에 당신은의 setTimeout에서 발생하는 오류를 잡지 못할 것
// This works!
function async() {
return new Promise(function (resolve, reject) {
throw new Error('test');
});
}
async().catch(function() {
console.log('Ok: 1');
});
// This doesn't work..
function async_fail() {
return new Promise(function (resolve, reject) {
setTimeout(function() {
throw new Error('test');
}, 1);
});
}
async_fail().catch(function() {
console.log('Ok: 2');
});
왜 당신이 약속을 내'setTimeout' 필요합니까 ... 당신이 경우 'BlueBird'를 사용하고 있습니다.'.delay'가 더 잘 작동하지 않아야합니까? http://bluebirdjs.com/docs/api/promise.delay.html –
@DavidEspino 맞습니다.하지만 사용하는 npm 패키지 중 하나가'''setTimeout'''을 사용하면 어떻게 될까요? '''Promise.catch'''가 발생하지 않기 때문에 코드가 깨질 것입니다 :/나는 이것이 _ 발생했음을 알고 싶습니다. –
그래서 ... 당신은'setTimeout'이 실행할 것을 제어하지 못합니까? 만약 당신이 내 생각에 그것이 그 문제 내에서의 약속을 '해결하는 것'또는 '거부하는 것'이라고 생각한다면 ... 맞습니까? http : //stackoverflow.com/questions/22707475/how-to-make-a-promise-from-settimeout ... 어쩌면 그게 도움이 될지 ... 대부분의'npm' 패키지는'콜백 '기반 ... 그래서 당신은'setTimeout'을 내부적으로 실행하는 패키지를 가지고 있다고 생각합니다 ... 95 %는'콜백 (callback) '옵션을 가질 수 있습니다 ... 그렇지 않다면 ... IMHO는 baaaad npm 패키지입니다 :) ... –