微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 为什么捕获行为像解决方案?

我无法解释为什么这段代码执行如下:

>“无法访问服务器”
>“成功:数据已加载”

为什么在无处可能出现解决调用loadData().then()?

我意识到我可以通过在第一个catch中抛出错误来“修复”代码,以便最后/更高的catch会看到错误.但我想知道显然解析我的代码的人或者是谁,导致在这种情况下达到.then().

是不是在第一个被认为是re​​solve()的catch中重新抛出错误,因为这段代码暗示它是什么?

或者我在这里失踪的Promises的行为怎么样?

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");
});

解决方法:

您正在捕获错误,这表示有意处理它.由于您不再“重新抛出”它,您的代码假定您以适当的方式处理它并且它不再是错误.

这与try..catch完全相同.如果你发现错误并且没有重新抛出它,它下面的代码(或调用代码)将继续运行.

如果从loadData Promise链中删除catch,它将按预期工作.

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");
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐