从承诺建设中捕捉错误

时间:2016-02-04 19:57:31

标签: javascript node.js promise bluebird

使用Bluebird承诺是否有更好的方法来执行以下操作

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让它看起来更整洁: - (

2 个答案:

答案 0 :(得分:2)

而不是Promise.something(new MyObject(data)),在创建Promise之前运行new MyObject ,而不是使用长格式的promise构造函数:

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

在promise构造函数中抛出同步的异常或then回调将被捕获,处理(包括类型匹配),并发送给catch处理程序({{3} })。

答案 1 :(得分:0)

当然有Promise.try,你也应该在Node中使用箭头作为短函数表达式:

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

与浏览器类似,您可以将a transpiler用于旧版本的Node。

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