使用bluebird承諾進行異步異常處理處理此方案的最佳方法是什么。我處于受控環(huán)境中,我不想崩潰。var Promise = require('bluebird');function getPromise(){
return new Promise(function(done, reject){
setTimeout(function(){
throw new Error("AJAJAJA");
}, 500);
});}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);
});從setTimeout中拋出時,我們總是得到:$ node bluebird.js
c:\blp\rplus\bbcode\scratchboard\bluebird.js:6
throw new Error("AJAJAJA");
^Error: AJAJAJA
at null._onTimeout (c:\blp\rplus\bbcode\scratchboard\bluebird.js:6:23)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)如果拋出發(fā)生在setTimeout之前,那么bluebirds catch會把它拿起來:var Promise = require('bluebird');function getPromise(){
return new Promise(function(done, reject){
throw new Error("Oh no!");
setTimeout(function(){
console.log("hihihihi")
}, 500);
});}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);
});結(jié)果是:$ node bluebird.jsError [Error: Oh no!]哪個好 - 但是如何在節(jié)點或瀏覽器中處理這種性質(zhì)的流氓異步回調(diào)。
使用bluebird承諾進行異步異常處理
慕慕森
2019-08-14 15:36:07