使用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让它看起来更整洁: - (
答案 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的另一个答案解释了为什么需要构造函数,因为异常发生在实际调用方法之前。