承诺不是域,它们不会捕获异步回调中的异常。你就是做不到。
然而诺言来捕捉从内抛出的异常then
/ catch
/ Promise
构造函数的回调。所以用
function getPromise(){
return new Promise(function(done, reject){
setTimeout(done, 500);
}).then(function() {
console.log("hihihihi");
throw new Error("Oh no!");
});
}
(或仅Promise.delay
)以获得所需的行为。永远不要抛出自定义(非承诺)异步回调,总是拒绝周围的承诺。使用try-catch
它是否真正需要。