我一直在研究蓝鸟承诺(Bluebird Promises)以及当出现错误时,promise.try与promise.resolve.then的不同之处。首先,以下是使用promise.try抛出同步错误的代码:
Promise.try(function() {
throw new Error('error');
}).catch(function(e) {
console.log(e);
});
其次是一些代码,该代码在解析时会抛出同步错误。
Promise.resolve().then(function() {
throw new Error('error');
}).catch(function(e) {
console.log(e);
});
据我所知,它们的行为是一样的。promise.try本质上是一种更清晰的解决Promise的方式吗?文档表示promise.try将捕获所有错误的Promise.catch处理程序,而不必处理同步和异步异常流程。
在文档中给出的示例中:
function getUserById(id) {
return Promise.try(function() {
if (typeof id !== "number") {
throw new Error("id must be a number");
}
return db.getUserById(id);
});
}
如果同步错误被抛出,异步代码将永远不会被执行。如果将该代码放置在promise.resolve().then(..)中是否会有任何区别?非常感谢任何关于promise.try的澄清/示例。
Promise.try
。 - wdetac