Ich habe eine Benutzer-Login-Funktion, die funktioniert. Aber ich möchte einen Timeout-Fehler für den Abruf einbeziehen. Gibt es eine Möglichkeit, einen Timer für 5 Sekunden oder so einzurichten, dass nach einer solchen Zeit aufhören würde zu versuchen, zu holen? Ansonsten bekomme ich nach einer Weile einen roten Bildschirm, der Netzwerkfehler sagt.Einen Timeout-Fehler mit Fetch - Reagieren Native
_userLogin() {
var value = this.refs.form.getValue();
if (value) { // if validation fails, value will be null
if (!this.validateEmail(value.email)) {
Alert.alert(
"Enter a valid email",
)
} else {
fetch("http://51.64.34.134:5000/api/login", {
method: "POST",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
timeout: 5000,
body: JSON.stringify({
username: value.email,
password: value.password,
})
})
.then((response) => response.json())
.then((responseData) => {
if (responseData.status == "success") {
this._onValueChange(STORAGE_KEY, responseData.data.token)
Alert.alert(
"Login Success!",
)
this.props.navigator.push({ name: 'StartScreen'})
} else if (responseData.status == "error") {
Alert.alert(
"Login Error",
responseData.message
)
}
})
.done();
}
}},
Durch diese Vorgehensweise, es nur Oberfläche der Frage zu lösen, konnte es nicht die Anfrage nach einer bestimmten Zeit abbrechen. – TomSawyer
@ TomSawyer Das war aber nicht gefragt; Die Frage wird nicht nach einem Timeout abgebrochen. Außerdem enthält meine Antwort Links zu möglichen Lösungen für den Abbruch, falls andere in diese Richtung gehen. Also ich bin mir nicht sicher, was der Punkt Ihres Kommentars war? –
Ich habe auf jeden hingewiesen, der sich dafür interessiert, wie ein echter Timeout-Mechanismus funktioniert. In der HTTP-Anfrage bedeutet ein Verbindungs-Timeout, dass die Verbindung abgebrochen wird, ihr zugeordneter Speicher muss freigegeben werden, ihr Prozess muss beendet werden, nicht nur false für das ui-Update zurückgegeben werden, sondern weiter im Hintergrund ausgeführt werden. – TomSawyer