Angenommen, ich habe ein Eingabefeld (mehr wie das Google-Suchfeld), das bei einer Änderung eine Anfrage auslöst und einige Ergebnisse anzeigt.AngularJS - Wie man ein Versprechen annulliert?
Zum Beispiel
Lassen Sie uns Typ in Dog
im Eingabe:
typed D -> Calls ctrl.search('D') -> Makes a request -> Changes model when success
typed DO -> Calls ctrl.search('DO') -> Makes a request -> Changes model when success
typed DOG -> Calls ctrl.search('DOG') -> Makes a request -> Changes model when success.
Nun lassen Sie uns sagen, dass die DO
Antrag später als die DOG
ein reagiert. Mein Modell würde mit den DO
Ergebnissen enden, selbst wenn ich DOG
eintippte.
Dafür brauche ich eine Möglichkeit, aktuelle laufende Anfragen abzubrechen oder abzubrechen, wenn ich weiter Buchstaben eintippe. Auf diese Weise wird mein Modell nur durch die letzte Anfrage geändert.
sieht meine Eingabe wie folgt aus:
<input type="text" class="form-control" data-ng-model="query" data-ng-change="ctrl.search(query)" placeholder="Search" />
Hier ist meine searchCtrl.js
:
var search;
var language;
var _this;
var SearchCtrl = function (searchService, lang)
{
search = searchService;
langauge = lang;
_this = this;
}
SearchCtrl.prototype.search = function (text)
{
var promise = search.language(language)
.facet('characters')
.highlight('quotes')
.query(text);
promise.then(function (response) {
if(!response) return;
_this.total = response.total;
_this.count = response.found;
_this.result = response.data;
});
}
Wir können nicht abbrechen promise..either müssen wir 'reject' oder' resolve' um es zu vervollständigen .. –
1) Benutze debounce in deinem Textfeld, du kannst ng-model-options verwenden 2) Du kannst der timeout-Eigenschaft von http options eine Zusage geben Sie können sie abbrechen (indem Sie das zurückgestellte Objekt ablehnen), aber die Anfrage wird weiterhin vom Server verarbeitet und auf Client-Ebene abgelehnt. – PSL
Es wäre wahrscheinlich besser, dies zu lösen, indem die Anfrage überhaupt nicht gesendet wird, bis eine kurze Schreibpause eingetreten ist. Durch das Abbrechen der Anfrage wird der Server nicht daran gehindert, sie zu verarbeiten, wenn sie sie bereits erhalten hat. Sehen Sie sich https://docs.angularjs.org/api/ng/directive/ngModelOptions genauer die Debounce-Option an. –