首页 文章

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

提问于
浏览
2

这样做的动机是能够捕获结束 .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 回答

  • 5

    听起来你正在寻找Promise.try . Promise.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);
    });
    

相关问题