以处理错误的方式启动javascript promise bluebird chain

时间:2016-03-21 15:11:40

标签: javascript node.js promise bluebird

这样做的动机是能够捕获结束.catch的所有可能错误,甚至是初始同步代码中发生的错误。

我想像我这样开始我的承诺链:

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);
})
...

但这些是间接的。有没有一种好方法可以通过执行一个可以返回一个promise的函数来启动一个promise链,并且在结尾.catch中捕获了错误?

1 个答案:

答案 0 :(得分:5)

听起来你正在寻找Promise.tryPromise.resolve适用于已有值且想要从中构建一个promise链的情况,但是如果要运行一些可能抛出的代码,请改用Promise.try

try接受并执行一个函数,以与then相同的方式处理任何同步异常。你最终会得到类似的东西:

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