2016-03-21 86 views
2

这样做的动机是能够捕获所有可能的错误,结尾.catch,即使是在初始同步代码中发生的错误。启动JavaScript诺言蓝鸟链处理错误的方式

我要开始我的诺言链像这样:

const bbPromise = require('bluebird'); 
bbPromise.do(() => { 
    someTask(); // Could throw 
    return someVar.doSomeOtherTaskAsync(); 
}) 
.then((result) => { 
    // Do something with result 
}) 
.catch((err) => { 
    console.log('err: ', err); 
}); 

是否有就像bbPromise.do功能的功能? bbPromise.resolve只是给了我传入的整个lambda函数,未执行。

我知道我可以做这样的事情:

bbPromise.bind({}).then(() => { 
    someTask(); // Could throw 
    return someVar.doSomeOtherTaskAsync(); 
}) 
... 

甚至:

new bbPromise((resolve, reject) => { 
    someTask(); // Could throw 
    return someVar.doSomeOtherTaskAsync().then(resolve).catch(reject); 
}) 
... 

但这些都有点间接的。是否有一种很好的方式通过执行一个可能会返回承诺的函数来启动承诺链,并且在结尾.catch中有错误?

回答

5

这听起来像你正在寻找Promise.tryPromise.resolve当你已经有一个值并且想要从它构建一个承诺链时是合适的,但是如果你想运行一些可能抛出的代码,请改用Promise.try

try取并执行的功能,与以相同的方式任何同步例外处理为then会。你会最终得到类似的东西:

bbPromise.try(someTask).then(() => { 
    return someVar.doSomeOtherTaskAsync(); 
}).then((result) => { 
    // Do something with result 
}).catch((err) => { 
    console.log('err: ', err); 
});