【发布时间】:2019-10-10 04:04:30
【问题描述】:
有没有类似async await 代码风格的 Promises 的 .catch() 方法?
这是一个通过 Promise 编写的代码示例:
const apiURL = 'https://jsonplaceholder.typicode.com/todos/1';
const badURL = 'zhttps://wcaf.fajfkajf.gg'
function getData(url){
fetch(url)
.then(response => response.json())
.then(json => console.log(json))
.catch( err => console.log('cannot load api'))
}
getData(apiURL);
getData(badURL);
尝试加载数据的简单函数,如果没有,则显示基本错误消息。现在我试图将它转录成async/await 样式代码,问题是,我真的想不出用catch() 写这个的方法
我最好的猜测是尝试try - catch,但 catch 部分不起作用:
const apiURL = 'https://jsonplaceholder.typicode.com/todos/1';
const badURL = 'zhttps://wcaf.fajfkajf.gg'
async function getData(url){
const response = await fetch(url);
try {
const json = await response.json();
console.log(json);
} catch (e) {
console.log('cannot load api');
}
}
getData(apiURL);
getData(badURL);
这很好地加载了对象 API,但似乎从未进入 catch{} 块,尽管传递了不正确的 url。
知道我做错了什么吗?
【问题讨论】:
-
只需将
const response = await fetch(url);放在try 块内即可。 -
@ponury-kostek 这不是因为
fetch()在不应该解析的时候解析,而是.json()解析不管fetch()结果如何
标签: javascript ecmascript-6 async-await try-catch es6-promise