Ich habe ein Szenario, in dem ich ein Versprechen zurückgebe. Das Versprechen geben grundsätzlich die Antwort einer Ajax-Anfrage.Was passiert, wenn wir das Versprechen nicht lösen oder ablehnen
Beim Zurückweisen des Versprechens zeigt es einen Fehlerdialog an, dass ein Serverfehler vorliegt.
Was ich tun möchte ist, wenn der Antwortcode 401 ist, möchte ich weder das Versprechen lösen noch lehnen (weil es Fehlerdialog zeigt). Ich möchte einfach auf die Login-Seite umleiten.
Mein Code sieht so etwas wie dieses
function makeRequest(ur,params) {
return new Promise(function(resolve,reject) {
fetch(url,params)
.then((response) => {
let status = response.status;
if (status >= 200 && status < 300) {
response.json().then((data) => {
resolve(data);
})
}
else {
if(status === 401) {
redirectToLoginPage();
}
else {
response.json().then((error) => {
if (!error.message) {
error.message = constants.SERVER_ERROR;
}
reject({status,error});
})
}
}
})
});
}
Wie Sie sehen können, wenn der Status 401, Ich bin Umleitung zur Login-Seite. Versprechen wird weder gelöst noch abgelehnt.
Ist dieser Code in Ordnung? Oder gibt es einen besseren Weg, dies zu erreichen.
Danke.
Wie Sie bereits erwähnt haben, wird durch eine Umleitung auf eine neue Browserseite der aktuelle Seitenstatus (einschließlich des gesamten Javascript-Status) vollständig gelöscht. Aber was passiert, wenn ich in eine einzelne Seiten-App umadressiere? Ich benutze ReactJS. Es wird also keine neue Browserseite geben, nur eine andere Ansicht. Ob es in Ordnung ist, in diesem Fall mit der Weiterleitung eine Abkürzung zu nehmen und andere Dinge ungelöst zu lassen. – Aniket
@Aniket - Dann ist das ein anderer Fall, den Ihre Frage nicht beschreibt. Sie müssen sicherstellen, dass die Dinge ordnungsgemäß bereinigt werden, so dass Sie keine Speicherlecks haben. Ich habe keine Ahnung ob es ein Problem damit geben würde oder nicht. Das nächste Mal bitte diese Art von Informationen in Ihre Frage. – jfriend00
Stellen Sie sicher, dass Sie keine Verweise auf die Funktionen "Ablehnen" und "Auflösen" haben, und hören Sie nicht nur auf, das Versprechen zu verweisen. Dann sollte GC einspringen. Anderenfalls, wenn Ihr Code immer noch auf "resolve" verweist, muss die Promise für den Fall, dass Ihr Code jemals "resolve()" aufruft, bei Ihnen bleiben. Hier ist ein Beispiel für eine Web-API, die Versprechen geben kann, wenn nicht vorsichtig: https://github.com/w3c/webcomponents/issues/674 – trusktr