从具有JavaScript fetch API的服务器请求时,您必须执行以下操作
fetch(API) .then(response => response.json()) .catch(err => console.log(err))
在这里,response.json()正在履行诺言。
response.json()
事实是,如果您想捕捉404的错误,则必须解决响应承诺,然后拒绝获取承诺,因为只有在catch出现网络错误时才能结束。因此,提取调用就像
404
catch
fetch(API) .then(response => response.ok ? response.json() : response.json().then(err => Promise.reject(err))) .catch(err => console.log(err))
这是很难理解的原因。所以我的问题是:为什么需要这样做?将诺言作为响应值有什么意义?有没有更好的方法来解决这个问题?
如果您的问题是“为什么要response.json()返还诺言?” 然后@Bergi在注释中提供线索:“它等待身体加载”。
如果您的问题是“为什么不是response.json属性?”,那么这将需要fetch延迟返回其响应,直到主体加载完毕,这对于某些人(但不是所有人)都可以。
response.json
fetch
这种polyfill应该可以为您提供所需的东西:
var fetchOk = api => fetch(api) .then(res => res.ok ? res : res.json().then(err => Promise.reject(err)));
那么您可以执行以下操作:
fetchOk(API) .then(response => response.json()) .catch(err => console.log(err));
反向不能被填充。