Javascript Node.js Bluebird-承诺错误返回为null

Javascript Node.js Bluebird-承诺错误返回为null,javascript,node.js,bluebird,Javascript,Node.js,Bluebird,我有一系列的承诺,如果其中任何一个抛出一个错误,它就会冒泡到最高承诺——有点像全球错误捕获 以下是我如何进行设置的简化版本: function bar() { return new Promise(function(resolve,reject) { var err = new Error('This is an error'); err.name = 'Permission'; return reject(null,err); }

我有一系列的承诺,如果其中任何一个抛出一个错误,它就会冒泡到最高承诺——有点像全球错误捕获

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

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函数运行,“error”的值为null。你知道是什么引起的吗


谢谢

拒绝函数只接受一个参数,即原因。所以,当你打电话时:

reject(null, err);
您正在传递
null
作为拒绝原因,并且未使用
err
参数。将代码更改为:

reject(err);

您可能希望在
bar
函数中使用
reject(err)
,以便不获取
null
您的
foo
函数使用!哦!我想是时候做更多的研究了!是的,只需执行
function foo(){return bar().catch(function(err){console.log(“Error catch and rethrown”,err);throw err;})}
Spot on on,我怎么会错过它呢:|