我无法理解为什么这段代码执行如下:
为什么loadData().then()在任何地方似乎都没有出现解决时就会被调用?
我意识到我可以通过在第一个捕获中抛出错误来“修复”代码,这样最后/更高的捕获将看到错误。但是,我想知道是谁或什么负责解析我的代码,导致在这个场景中到达.then()。
是否像这段代码所暗示的那样,重新抛出第一个捕获中的错误是否被认为是一个解析()?
或者说我在这里错过了承诺的行为?
function doGoogleRequest(){
return new Promise(function(resolve, reject){
reject("Could not reach server.");
});
}
function loadData(){
return doGoogleRequest()
.then(function(data){
return data;
}).catch(function(err){
console.error(err);
});
}
loadData()
.then(function(){
console.log("Success: Data has been loaded.");
}).catch(function(err){
console.log("Error: could not load data");
});发布于 2018-08-15 21:30:43
您正在捕获错误,这表明了处理它的意图。由于您不再“重新抛出”它,所以您的代码假设您以适当的方式处理它,并且它不再是一个错误。
这与try..catch的行为完全相同。如果您catch一个错误,而不是重新抛出它,下面的代码(或调用代码)继续运行。
如果您将catch从您的loadData承诺链中删除,它将按预期工作。
function doGoogleRequest(){
return new Promise(function(resolve, reject){
reject("Could not reach server.");
});
}
function loadData(){
return doGoogleRequest()
.then(function(data){
return data;
});
}
loadData()
.then(function(){
console.log("Success: Data has been loaded.");
}).catch(function(err){
console.log("Error: could not load data");
});
https://stackoverflow.com/questions/51866635
复制相似问题