Wenn zwei aufeinanderfolgende Serviceanrufe über den $ http-Winkelservice bei der Dropdown-Elementauswahl getätigt werden und angenommen wird, dass der erste Anruf Zeit benötigt, um zurückzukehren, und zweiten Anruf zurückgibt, bevor der erste Anruf aufgelöst wird, zeigt er Daten des ersten Anrufs für die zweite Elementauswahl an.Wie kann ich die Zusage für den ersten Anruf während 2 aufeinander folgenden Serviceanrufen abbrechen/stornieren?
So ist es eine Möglichkeit, erste Versprechen abzubrechen, wenn Service-Aufruf wieder hergestellt vor dem ersten Anruf gelöst wird.
Für den Demo-Zweck habe ich Beispiel plunkar erstellt, die Drop-Down mit wenigen Elementen, die ich explizite Bedingung hinzugefügt, wo auf die Auswahl des ersten Elements dauerte etwas mehr Zeit als andere Elemente. Wählen Sie also das erste Element aus und wählen Sie sofort das zweite Element aus, um das Szenario zu reproduzieren. Überprüfen Sie die Anzeige der Favoriten auf dem Bildschirm.
Jede Hilfe wird geschätzt!
Servicecode:
app.factory('bookService', function($http, $q, $timeout) {
return {
getBook: function(id) {
var promise = $q.defer();
var timeoutSpan = id == 1 ? 3000 : 500;
$http.get("favouriteBooks.json").success(function(data) {
$timeout(function() {
promise.resolve(data.filter(function(obj) {
return obj.id == id
}));
}, timeoutSpan);
}).error(function(msg) {
promise.reject(msg);
})
return promise.promise;
}
}
});
sein kann [diese] (http://www.bennadel.com/blog/2616-aborting-ajax-requests-using-http- and-angularjs.htm) hilft Ihnen –
Die zweite AJAX-Anfrage erst nach der Antwort der ersten Anfrage (Synchronisation Ihrer Anfrage) auszulösen. Um dies zu erreichen, können Sie das Dropdown-Menü mit einem Ladesymbol oder einem Bild deaktivieren, bis die Antwort für die erste Anfrage empfangen wird. Dies ist die eine Lösung, die Sie ausprobieren können. –
Karthik, die Anforderung besteht nicht darin, den Benutzer daran zu hindern, aus Sicht der Benutzererfahrung Maßnahmen zu ergreifen. Dies ist die letzte Option, wenn dieses Problem nicht gelöst werden kann. –