使用bluebird承诺进行异步异常处理
处理此方案的最佳方法是什么。我处于受控环境中,我不想崩溃。
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)
如果抛出发生在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); });
结果是:
$ node bluebird.jsError [Error: Oh no!]
哪个好 - 但是如何在节点或浏览器中处理这种性质的流氓异步回调。
开满天机
相关分类