javascript - Node.js Bluebird - promise 错误返回为 null

标签 javascript node.js bluebird

我有一系列的 promise ,如果其中任何一个抛出错误,它就会冒泡到最上面的 promise - 有点像全局错误捕获。

这是我如何进行设置的简化版本:

function bar() {
    return new Promise(function(resolve,reject) {
        var err = new Error('This is an error');
        err.name = 'Permission';
        return reject(null,err);
    });
}

function foo() {
    return new Promise(function(resolve,reject) {
        bar()
            .then(function(results) {
                return resolve(results);
            })
            .then(null,function(error) {
                console.log('Error caught'); //This shows
                console.log(error); //outputs null
                return reject(error);
            });
    });
}

foo()
    .then(function(results) {
        console.log(results);
    })
    .then(null,function(error) {
        //this never gets reached
    });

由于某种原因,尽管错误函数运行,但“error”的值为空。关于什么会导致这种情况有什么想法吗?

谢谢!

最佳答案

reject 函数只接受一个参数,即原因。因此,当您调用时:

reject(null, err);

您传递 null 作为拒绝原因,并且不使用 err 参数。将您的代码更改为:

reject(err);

关于javascript - Node.js Bluebird - promise 错误返回为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31572489/

相关文章:

javascript - 如何访问 .then() 链中先前的 Promise 结果?

javascript - 图像转换为 Base64 未显示在引导模式 Canvas 上

javascript - webGL 中的短纹理

javascript - 使用 request-promise 嵌套异步请求

node.js - 找不到绑定(bind)文件。在 Electron 环境中使用串行端口时尝试过

node.js - MongoDB:处理自动递增的模型 id 而不是 Mongo 的 native ObjectID

javascript - 等待循环内的 promise

javascript - 防止 iframe 在 chrome 上嵌入 iframe 上的 iframe 滚动捕获

javascript - Bootstrap + 2个版本的jquery

javascript - 在浏览器中动态执行 TypeScript