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,我怎么会错过它呢:|