我正在嘗試使用 fetch api 從我的本地網路中獲取資源
獲取后,我想檢查回應型別并采取相應措施
但是,當我收到的500狀態,我試圖回傳一個錯誤回呼時,.then()這是應該的功能,只運行的時候response.ok是false運行兩種方式
fetch(testUrl, { headers, method: "POST" })
.then(response => {
if (response.status === 200) { return response.json() }
if (response.status === 401) { Logout() }
if (response.status === 500) {
return setTestApiFetchError({
'error_type': "SERVER_ERROR",
"error": true
})
}
})
.then(data => console.log(Data))
函式分別.then(data => console.log(data))運行
uj5u.com熱心網友回復:
如果您希望服務器錯誤不通過.then()塊,您需要throw這樣承諾不會解決而是拒絕。
if (response.status === 500) {
setTestApiFetchError({
"error_type": "SERVER_ERROR",
"error": true
});
throw "SERVER_ERROR";
}
現在處理catch:
.then(data => console.log(data))
.catch(err => console.error(err))
uj5u.com熱心網友回復:
你需要用 resolve 和 reject 引數來處理你的承諾
像這樣試試
const tt = fetch(testUrl, { headers, method: "POST" })
.then((response,reject)=> {
const rejectReponse= {
"error_type": "SERVER_ERROR",
"error": true
}
if (response.ok === true) return response.json()
else if (response.status===500) return reject (rejectReponse)
})
tt.then(x=>console.log(x)).then(undefined,x=>console.log(x))
在本文中了解更多檢查承諾:https : //learnjsx.com/category/2/posts/es6-promise
uj5u.com熱心網友回復:
這里有幾個可能有幫助的鏈接: 如何使用 then() 將 Fetch 回應的 JSON 主體傳遞給 Throw Error()? https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch https://usefulangle.com/post/314/javascript-fetch-error-handling
正如 Ali 所提到的,您希望拒絕或拋出 500 回應以將其放入 catch 塊中。就個人而言,我只是檢查 response.ok,然后處理 catch 中的任何錯誤:
fetch(testUrl, { headers, method: "POST" })
.then((response,reject)=> {
if (response.ok) return response.json();
return Promise.reject(rejectReponse)
})
.then(success)
.catch(fail)
或者,如果您能夠使用 async/await:
try{
const response = await fetch(testUrl, { headers, method: "POST" });
if (!response.ok) throw response;
//response is 200-209
const data = await response.json();
//etc.
}catch(e){
if (e.status === 401) logout();
//handle server/client errors
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/351791.html
上一篇:“http://127.0.0.1:5500”已被CORS政策阻止
下一篇:React-添加換行符;
