猿问

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

很多帖子、问题和文章都解释了如何处理 fetch 请求中的 HTTP 错误,但解决方案仅指向logging或仅使用答案的文本,但我想获取响应详细信息(状态 + statusText)和响应文本(由服务器)

我想要一个通用的fetch_api,然后我可以在我的不同组件中使用它。对于有效的响应,它正在工作,但对于错误,我无法从服务器获取详细信息+文本,因为我需要返回一个rejected Promise但我无法使其工作,这是我的尝试

  • 响应状态

  • response.statusText

  • 响应.url

  • response.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

            }

        )

}


// USE

fetchStatus() {

    App.fetch_get(host + "/statusERROR")

       .then(result => this.setState({isLoaded: true, modules: result}))

       .catch(error => this.setState({isLoaded: true, error: {message: error}}))

}


GCT1015
浏览 207回答 1
1回答

尚方宝剑之说

终于明白了:使用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}}))
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答