【问题标题】:Start javascript promise bluebird chain in way that handles errors以处理错误的方式启动 javascript promise bluebird 链
【发布时间】:2016-03-21 23:15:51
【问题描述】:

这样做的动机是能够捕捉到结尾为.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);
})
...

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

【问题讨论】:

    标签: javascript node.js promise bluebird


    【解决方案1】:

    听起来您正在寻找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);
    });
    

    【讨论】:

      猜你喜欢
      • 2015-08-28
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      • 2016-09-18
      • 2016-02-19
      • 2017-06-08
      • 2014-09-28
      • 2016-05-08
      相关资源
      最近更新 更多