小编use*_*396的帖子

promise.try vs promise.resolve错误处理

我一直在关注bluebird promises以及promise.try与promise.resolve.then的不同之处在于抛出错误.首先使用promise.try的一些代码会引发同步错误

Promise.try(function() {
    throw new Error('error');
}).catch(function(e) {
    console.log(e);
});
Run Code Online (Sandbox Code Playgroud)

其次是一些在解析时抛出同步错误的代码

Promise.resolve().then(function() {
    throw new Error('error');
}).catch(function(e) {
    console.log(e);
});
Run Code Online (Sandbox Code Playgroud)

据我所知,他们的行为都是一样的.promise.try本质上是一种解决承诺的更清洁方式吗?

文档说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);
    });
}
Run Code Online (Sandbox Code Playgroud)

如果抛出同步错误,将永远不会到达异步代码.如果你将上面的代码放在promise.resolve()中然后(..)会有什么区别吗?

任何有关promise.try的澄清/示例将不胜感激.

promise bluebird

8
推荐指数
2
解决办法
2940
查看次数

标签 统计

bluebird ×1

promise ×1