我正在使用异步window.fetch
调用,它返回一个promise。为了解决结果,我把我的处理程序放在了承诺的then()
部分。
async await
的文档建议使用try catch
来捕捉错误。但承诺有一个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!")
}
}
捕获错误的最佳点是什么?
您应该在需要数据的地方处理错误,以便发生故障,更重要的是您可以真正处理它的地方。这意味着您应该告知用户有关错误或重试或其他任何事情。在您的情况下,错误处理程序会使所有错误无法解决,并且无法真正处理它们,这使得使用Promise.catch
不必要,因为承诺永远不会被拒绝。所以你的loadData函数根本不应该处理错误,而是将它传递给更高级别的范围:
async function loadData(){
return (await fetch('./data.json')).json();
}
现在您可以使用then
处理错误:
loadData().then(
/*success*/ (data) => console.log(data),
/*failure*/ (err) => console.error(err)
);
或者使用async / await:
(async function(){
try {
console.log( await loadData() );
} catch(e){
console.error(e);
}
})()
被拒绝的承诺,承诺中的catch()和等待中的catch有什么区别?
当promise被拒绝时,它会调用传递给catch
的处理程序或then
的第二个参数。