Giả sử tôi có trường nhập văn bản (giống như trường tìm kiếm của Google), khi được thay đổi, sẽ kích hoạt yêu cầu và hiển thị một số kết quả.AngularJS - Làm cách nào để hủy lời hứa?
Ví dụ,
Hãy gõ Dog
trong đầu vào:
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.
Bây giờ, chúng ta hãy nói rằng yêu cầu DO
phản ứng muộn hơn DOG
một. Mô hình của tôi sẽ kết thúc với kết quả DO
, ngay cả khi tôi đã nhập DOG
.
Đối với điều đó, tôi cần một cách để hủy hoặc hủy các yêu cầu hiện tại đang diễn ra nếu tôi tiếp tục nhập các ký tự. Bằng cách đó, mô hình của tôi chỉ thay đổi theo yêu cầu cuối cùng.
đầu vào của tôi trông giống như sau:
<input type="text" class="form-control" data-ng-model="query" data-ng-change="ctrl.search(query)" placeholder="Search" />
Đây là tôi 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;
});
}
Chúng tôi không thể hủy promise..either chúng ta cần cho 'reject' hoặc' resolve' nó để hoàn thành nó .. –
1) Sử dụng debounce trong hộp văn bản của bạn, bạn có thể sử dụng tùy chọn ng-model-2) Bạn có thể cung cấp lời hứa cho thuộc tính timeout của tùy chọn http bạn có thể hủy bỏ nó (bằng cách từ chối đối tượng trì hoãn), nhưng yêu cầu sẽ vẫn được xử lý bởi máy chủ nó sẽ bị từ chối ở cấp độ máy khách. – PSL
Có thể sẽ tốt hơn nếu bạn không giải quyết yêu cầu này ngay từ đầu cho đến khi tạm dừng trong quá trình gõ đã xảy ra. Việc hủy yêu cầu sẽ không ngăn máy chủ xử lý yêu cầu nếu nó đã nhận được yêu cầu đó. xem xét https://docs.angularjs.org/api/ng/directive/ngModelOptions tùy chọn gỡ lỗi cụ thể. –