[英]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.