2016-02-04 34 views
0

捕获错误是否有这样做的以下使用蓝鸟更好的办法失信从无极建设

Promise.resolve() 
    .then(function() {return new MyObject(data)}) 
    .then.....etc 
    .catch(function (e){ //handle it}) 

我的MyObject - 和数据从外部系统,这可能是无效的传入,从而可以打破的承诺链。在一个函数中包装对象的创建似乎真的很混乱。有什么样

Promise.something(new MyObject(data)) 
     .then().... 
     .catch.... 

而且 - 节点0.10所以没有LAMBDA,使其看起来更整洁:-(

+0

如果你从前面的承诺中获得数据,你需要使用'then'这样或那样的方法。你到底在找什么?一种减少函数(数据){返回新的MyObject(数据)}'的方法? – zzzzBov

+0

你可能在寻找['Promise.resolve(new MyObject(data))'](http://bluebirdjs.com/docs/api/promise.resolve.html)来从'MyObject'生成一个promise吗? – zzzzBov

+0

@zzzzBov听起来像OP希望承诺能够捕捉到新的MyObject可能抛出的任何异常(@Silver,是吗?) – ssube

回答

2

不是Promise.something(new MyObject(data)),它运行创造了无极new MyObject以前,使用长形的承诺构造函数:抛出同步承诺构造函数或内

new Promise(function (resolve) { 
    resolve(new MyObject(data)); 
}.then(foo).catch(bar); 

例外回调将被捕获,处理(包括类型匹配),并发送到catch处理程序(Bluebird docs)。

0

肯定有,Promise.try,你也应该在节点中使用箭头的短函数表达式:

Promise.try(() => new MyObject(data)); 

像在浏览器中,你可以使用a transpiler对于旧版本的节点。

此外,我不会在构造函数中执行IO,但这是另一回事。通过ssube的其他答案解释了为什么需要构造函数,因为在实际调用方法之前发生异常。