728x90
반응형
질문 : 자바 스크립트 약속-거부 대 던지기
이 주제에 대한 여러 기사를 읽었지만 Promise.reject
와 오류를 던지는 것 사이에 차이점이 있는지 아직 명확하지 않습니다. 예를 들면
Promise.reject 사용
return asyncIsPermitted()
.then(function(result) {
if (result === true) {
return true;
}
else {
return Promise.reject(new PermissionDenied());
}
});
던지기 사용
return asyncIsPermitted()
.then(function(result) {
if (result === true) {
return true;
}
else {
throw new PermissionDenied();
}
});
내 선호는 throw
가 더 짧기 때문에 사용하는 것이지만, 다른 것보다 하나의 이점이 있는지 궁금합니다.
답변
하나를 사용하는 것의 이점은 없지만 throw
가 작동하지 않는 특별한 경우가 있습니다. 그러나 이러한 경우는 수정할 수 있습니다.
promise 콜백 내부에있을 때 언제든지 throw
를 사용할 수 있습니다. 그러나 다른 비동기 콜백에있는 경우에는 reject
를 사용해야합니다.
예를 들어, 이것은 catch를 트리거하지 않습니다.
new Promise(function() {
setTimeout(function() {
throw 'or nah';
// return Promise.reject('or nah'); also won't work
}, 1000);
}).catch(function(e) {
console.log(e); // doesn't happen
});
대신 해결되지 않은 약속과 잡히지 않은 예외가 남습니다. reject
를 사용하려는 경우입니다. 그러나 두 가지 방법으로이 문제를 해결할 수 있습니다.
1.제한 시간 내에 원래 Promise의 거부 함수를 사용합니다.
new Promise(function(resolve, reject) {
setTimeout(function() {
reject('or nah');
}, 1000);
}).catch(function(e) {
console.log(e); // works!
});
2.시간 초과를 약속합니다.
function timeout(duration) { // Thanks joews
return new Promise(function(resolve) {
setTimeout(resolve, duration);
});
}
timeout(1000).then(function() {
throw 'worky!';
// return Promise.reject('worky'); also works
}).catch(function(e) {
console.log(e); // 'worky!'
});
출처 : https://stackoverflow.com/questions/33445415/javascript-promises-reject-vs-throw
728x90
반응형
'프로그래밍 언어 > HTML,CSS,JS' 카테고리의 다른 글
CSS만 있는 <select> 드롭다운을 스타일링 하는 방법 (0) | 2021.09.08 |
---|---|
$ (document) .jQuery 를 대체 하는 방법 (0) | 2021.09.08 |
Node.js의 fs.readFile ()이 문자열 대신 버퍼를 반환하는 이유 (0) | 2021.09.07 |
JS / jQuery에서 화살표 키 바인딩 (0) | 2021.09.07 |
CSS를 사용하여 오른쪽에서 배경 이미지 오프셋 (0) | 2021.09.07 |