很多帖子、问题和文章都解释了如何处理 fetch 请求中的 HTTP 错误,但解决方案仅指向logging或仅使用答案的文本,但我想获取响应详细信息(状态 + statusText)和响应文本(由服务器)我想要一个通用的fetch_api,然后我可以在我的不同组件中使用它。对于有效的响应,它正在工作,但对于错误,我无法从服务器获取详细信息+文本,因为我需要返回一个rejected Promise但我无法使其工作,这是我的尝试响应状态response.statusText响应.urlresponse.text() // 这是一个 Promise,我无法得到它以及细节static fetch_api(url, method = 'get') { return fetch(url, {method: method}) .then(res => { if (res.ok) return res.json(); throw res; }) .then((result) => result , (error) => { const err = ("[" + error.status + ":" + error.statusText + "] while fetching " + error.url + ", response is " + error.text()) // how to get server text return Promise.reject(err) // ok but server text missing //Er [404:NOT FOUND] while ... is [object Promise] return Promise.reject().then(() => error.text()) // Not ok return Promise.reject(error.status) // OK but need all return Promise.reject(error.statusText) // OK but need all } )}// USEfetchStatus() { App.fetch_get(host + "/statusERROR") .then(result => this.setState({isLoaded: true, modules: result})) .catch(error => this.setState({isLoaded: true, error: {message: error}}))}
1 回答
尚方宝剑之说
TA贡献1788条经验 获得超4个赞
终于明白了:使用res.text()承诺,并返回Promise.reject()i的内部
static fetch_api(url, method = 'get') {
return fetch(url, {method: method})
.then(res => {
if (res.ok) return res.json();
throw res;
})
.then(result => result)
.catch(error => error.text().then(errormsg => Promise.reject("[" + error.status + ":" +
error.statusText + "] while fetching " + error.url + ", response is [" + errormsg+"]"))
)
}
像这样使用
App.fetch_get(host + "/status")
.then(result => this.setState({items: result}))
.catch(error => this.setState({error: error}}))
添加回答
举报
0/150
提交
取消