![](/img/trans.png)
[英]How to handle returned different http status codes separately in Fetch Api?
[英]How to properly handle a 400 (or any non-successful status codes) with JS fetch
我有一個API端點(恰好是Django Rest框架),通常會返回創建的響應狀態代碼201,但是如果未正確輸入字段,也會返回400錯誤。 我正在使用訪存來使用此API並返回json,如下所示:
export const myAPICall = (postValues) => {
return fetch('/myapi/', someHeaders)
.then(resp => {
return resp.json();
})
.then(data => {
return data
}).catch(error => (error));
}
所有這些工作都很好,但是當然會出現400錯誤(從技術上講是有效的響應,不會引發錯誤),並且該錯誤中包含我想用來通知用戶的可解析的JSON。
錯誤的實際響應可能如下所示:
Response {type: "cors", url: "http://myapi/", redirected: false, status: 400, ok: false, …}
響應的正文包含有用的JSON。 當響應不正常時,我仍然想拋出一個錯誤,所以這是我最初所做的:
export const myAPICall = (postValues) => {
return fetch('/myapi/', someHeaders)
.then(resp => {
if (!resp.ok) {
throw resp;
}
return resp.json();
})
.then(data => {
return data
}).catch(error => { throw error});
}
但是,我在為如何返回響應的JSON值以供以后使用而苦苦掙扎(在調用myAPICall()。then(..)。catch(error => {...}時要注意)
實際上,我什至不確定這是否是正確的方法。 因此,如果有人提出建議,而不僅僅是將其作為一個可行的例子,那將是非常受歡迎的。 可以肯定的是,如果這是實際錯誤,那么我不想在那么中返回“數據”,因為JSON對象的格式將完全不同。
非常感謝,
您可能想返回自己的Promise,並根據獲取的結果來解決/拒絕該諾言。 大概是這樣的:
export const myAPICall = (postValues) => {
return new Promise((resolve, reject) => {
fetch('/myapi/', someHeaders)
.then(resp => {
if (!resp.ok) {
reject(resp);
}
else {
resolve(resp);
}
})
.catch(error => { reject(error) });
});
}
myAPICall().then(result => console.log(result)).catch(err => console.log(err))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.