Umgang mit response-status abrufen im JS reagieren
Ich gerade angefangen zu lernen, ReactJS. Jetzt will ich wissen, wie man mit response-status, wenn ich eine API-Anfrage mit fetch. Hier ist mein code :
componentDidMount(){
this.setState({ isLoading: true })
var id = this.props.match.params.id
const api = `bla/bla/${id}`;
console.log("start call api")
fetch(api)
.then((response) => {
if(response.status === 200){
console.log("SUCCESSS")
return response.json();
}else if(response.status === 408){
console.log("SOMETHING WENT WRONG")
this.setState({ requestFailed: true })
}
})
.then((data) => {
this.setState({ isLoading: false, downlines: data.response })
console.log("DATA STORED")
})
.catch((error) => {
this.setState({ requestFailed: true })
})
console.log("end call api")
}
Drehte ich meine Verbindung um einen test zu machen für 408
, aber mein laden wird immer noch angezeigt.
render(){
const { isLoading, requestFailed } = this.state;
if(requestFailed){
return(
<div className="errorContainer">
<a className="errorMessage">Opss.. Something went wrong :(</a>
</div>
)
}
}
hier ist der log-in meinem browser:
Irgendwelche Ideen, zu beheben ?
- Können Sie sehen, dass die eigentliche status-Nummer? Es muss nicht für jeden Fehler 408
- Überprüfung
response.ok
wird wahrscheinlich sicherer sein. - was ist mit der anderen Antwort, wie keine Verbindung oder Anfrage Zeit aus ?
- Dann die Reaktion wäre nicht OK
- tjvantoll.com/2015/09/13/fetch-and-errors
Du musst angemeldet sein, um einen Kommentar abzugeben.
Laut MDN-Dokumentation:
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
Blick auf deinen code, ich glaube nicht, dass Ihr 408 Fehler-check wird immer laufen. Ich glaube nicht, dass es in der Tat. Im Grunde, was der code oben macht, ist die Rücksendung der json-Antwort, wenn die Anfrage 200ish ok, ansonsten es wirft einen Fehler. Wenn ein Fehler Auftritt, ist der zweite dann nie ausgeführt, und es wird geworfen, um Ihre catch-block. Vielleicht können Sie die isLoading: false gibt es?
Du bist auch log-Anweisung für die Ende-api ist nicht korrekt. Wird aufgerufen, bevor Ihre Versprechen abgeschlossen ist.
Perhaps you can set the isLoading: false there?
rette mich.. Danke 😀Wirft einen Fehler wenn die Antwort ist nicht OK, so dass es geht direkt an die
catch
: