2.2 判断请求是否成功
fetch()
发出请求以后,有一个很重要的注意点:只有网络错误,或者无法连接时,fetch()
才会报错,其他情况都不会报错,而是认为请求成功。
这就是说,即使服务器返回的状态码是 4xx 或 5xx,fetch()
也不会报错(即 Promise 不会变为 rejected
状态)。
只有通过Response.status
属性,得到 HTTP 回应的真实状态码,才能判断请求是否成功。请看下面的例子。
async function fetchText() {
let response = await fetch('/readme.txt');
if (response.status >= 200 && response.status < 300) {
return await response.text();
} else {
throw new Error(response.statusText);
}
}
上面示例中,response.status
属性只有等于 2xx (200~299),才能认定请求成功。这里不用考虑网址跳转(状态码为 3xx),因为fetch()
会将跳转的状态码自动转为 200。
另一种方法是判断response.ok
是否为true
。
if (response.ok) {
// 请求成功
} else {
// 请求失败
}