在Javascript的承诺中,为什么可以';是否将错误传递给下一个链“.catch()”?
以下是一个例子:在Javascript的承诺中,为什么可以';是否将错误传递给下一个链“.catch()”?,javascript,asynchronous,promise,ecmascript-6,Javascript,Asynchronous,Promise,Ecmascript 6,以下是一个例子: var promise = new Promise(function(resolve, reject) { throw new Error('test'); }); promise.catch(function(error) { console.log(error + ' 1 '); return error }).catch(function(error) { console.log(error + ' 2 '); return error }) 代码的
var promise = new Promise(function(resolve, reject) {
throw new Error('test');
});
promise.catch(function(error) {
console.log(error + ' 1 ');
return error
}).catch(function(error) {
console.log(error + ' 2 ');
return error
})
代码的结果是:
Error: test 1
可以看出,第二个
catch
调用不起作用。这是否意味着Promise无法使用catch的链语法处理错误?是否有方法将当前错误传递给下一个catch()
调用?返回错误不会使其命中下一个catch
。您需要再次抛出该错误:
promise.catch(function(error) {
console.log(error + ' 1 ');
throw error
}).catch(function(error) {
console.log(error + ' 2 ');
return error
})
->错误:测试1
->错误:测试2
您必须再次抛出错误,而不仅仅是返回错误对象:
var promise = new Promise(function(resolve, reject) {
throw new Error('test');
});
promise.catch(function(error) {
console.log(error + ' 1 ');
throw error
}).catch(function(error) {
console.log(error + ' 2 ');
return error
})
js没有“这是一个错误对象,所以抛出它”的内部概念-如果在您的第一个catch()
之后有一个then()
子句,那么操作将被推迟到该子句,如下所示:
var promise = new Promise(function(resolve, reject) {
throw new Error('test');
});
promise.catch(function(error) {
console.log(error + ' 1 ');
return error
}).then(function(error) {
console.log(error + ' 2 ');
return error
})
希望这有帮助 你永远不会重犯错误。为什么返回值会被视为要捕获的错误?使用
抛出错误如果您从catch
返回内容,则表示您已经处理了问题,这是要继续处理的值。如果您还没有处理这个问题,请重试而不是返回。这基本上就像问为什么try{try{try{throw new Error}catch(e){log(e);returne}}catch(e){log(e);returne}
不记录两次。因为你已经发现了错误。我想知道“这是一个错误对象,所以抛出'功能会是什么样子,甚至是它的意思。”@T.J.Crowder我编辑了我的措辞,所以我要gunna删除我的所有评论以清理答案:)