Supponiamo di avere un campo di testo di input (più simile al campo di ricerca di Google) che, una volta modificato, attiverà una richiesta e mostrerà alcuni risultati.AngularJS - Come annullare una promessa?
Per esempio, il tipo
di entrare Dog
nell'input:
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.
Ora, diciamo che la richiesta DO
risponde oltre il DOG
uno. Il mio modello finirebbe con i risultati , anche se ho digitato DOG
.
Per questo, ho bisogno di un modo per annullare o interrompere le richieste in corso correnti se continuo a digitare caratteri. In questo modo, il mio modello è cambiato solo dalla richiesta finale.
il mio ingresso è simile al seguente:
<input type="text" class="form-control" data-ng-model="query" data-ng-change="ctrl.search(query)" placeholder="Search" />
Ecco il mio 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;
});
}
Non possiamo annullare promise..either abbiamo bisogno di 'reject' o' resolve' per completarlo .. –
1) Usa debounce nella tua casella di testo puoi usare ng-model-options 2) Puoi fornire una promessa alla proprietà di timeout dell'opzione http che è possibile annullarlo (rifiutando tale oggetto posticipato), ma la richiesta verrà comunque elaborata dal server che verrà rifiutata a livello del client. – PSL
Probabilmente sarebbe meglio risolvere questo problema non inviando la richiesta in primo luogo finché non si è verificata una breve pausa nella digitazione. L'annullamento della richiesta non impedirà al server di elaborarlo se lo ha già ricevuto. guarda in https://docs.angularjs.org/api/ng/directive/ngModelOptions in modo speci fi co l'opzione di rimbalzo. –