为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 fetch 和 Promises 中获取 HTTP 错误详细信息和文本?

如何从 fetch 和 Promises 中获取 HTTP 错误详细信息和文本?

GCT1015 2021-12-23 16:59:15
很多帖子、问题和文章都解释了如何处理 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}}))


查看完整回答
反对 回复 2021-12-23
  • 1 回答
  • 0 关注
  • 206 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信