我正在使用异步window.fetch
调用来返回一个promise。为了解决这个问题,我把处理程序放在了那个承诺的then()
部分。
async await
的文档建议使用try catch
来捕获错误。但Promise还有reject
和catch()
功能......
我不清楚这三个中的哪一个必须用来捕获来自fetch
调用的失败加载尝试。我也没有看到被拒绝的Promise与fetch(url).then().catch()
捕获的失败提取之间的区别。
我唯一的要求是fetch
调用在我自己的函数中,我可以从任何地方调用。
// CALLING THE LOADDATA FUNCTION
loadData().then(res => {
console.log("success")
}, err => {
console.log("rejected!")
}).catch(e => {
console.log("error is " + e);
})
// ASYNC LOADDATA
async function loadData() {
try{
const response = await fetch('./data.json');
return await response.json();
}
catch(e) {
console.log("nope!")
}
}
答案 0 :(得分:1)
捕获错误的最佳点是什么?
您应该在需要数据的地方处理错误,以便发生故障,更重要的是您可以真正处理它的地方。这意味着您应该告知用户有关错误或重试或其他任何事情。
在您的情况下,错误处理程序会使所有错误无效,并且无法真正处理它们,这使得使用 async function loadData(){
return (await fetch('./data.json')).json();
}
成为不必要的,因为承诺永远不会被拒绝。
所以你的loadData函数根本不应该处理错误,而是将它传递给更高级别的范围:
then
现在您可以使用 loadData().then(
/*success*/ (data) => console.log(data),
/*failure*/ (err) => console.error(err)
);
处理错误:
(async function(){
try {
console.log( await loadData() );
} catch(e){
console.error(e);
}
})()
或使用async / await:
catch
被拒绝的承诺,承诺中的catch()和等待中的catch有什么区别?
当承诺被拒绝时,它会调用传递给then
的处理程序或{{1}}的第二个参数。