使用 Bluebird Promises 進行非同步異常處理
問:如何使用 Bluebird Promises 處理非同步回調中未處理的異常?
Bluebird Promise 本質上不會捕捉非同步回呼拋出的異常,這與domains.
A:使用Promise 建構函式或then() 閉包處理異常
要捕捉非同步回呼中的異常,請將回呼包裝在Promise 建構子或then( )閉包:
function getPromise(){
return new Promise(function(done, reject){
setTimeout(function(){
throw new Error("AJAJAJA");
}, 500);
}).then(function() {
console.log("hihihihi");
throw new Error("Oh no!");
});
}
避免在自訂非同步回呼中拋出異常
永遠不要在自訂非同步回呼中直接拋出異常(在 Promise 回調之外)。相反,拒絕周圍的承諾:
function getPromise(){
return new Promise(function(done, reject){
setTimeout(done, 500);
}).then(function() {
console.log("hihihihi");
reject(new Error("Oh no!"));
});
}
範例
使用 Promise 建構子:
var p = getPromise();
p.then(function(){
console.log("Yay");
}).error(function(e){
console.log("Rejected",e);
}).catch(Error, function(e){
console.log("Error",e);
}).catch(function(e){
console.log("Unknown", e);
});
輸出:
Error [Error: Oh no!]
此方法可確保捕捉並正確處理異常,防止應用程式崩潰。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3