繁体   English   中英

以处理错误的方式启动JavaScript Promise Bluebird链

[英]Start javascript promise bluebird chain in way that handles errors

这样做的动机是能够捕获以.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捕获错误的函数来启动承诺链?

听起来您正在寻找Promise.try Promise.resolve适用于已经有一个值并希望从中建立一个承诺链的情况,但是如果您想运行一些可能抛出的代码,请改用Promise.try

try接受并执行一个函数,以与then相同的方式处理任何同步异常。 您最终将得到以下结果:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM