2013-06-06 33 views
9

Tôi gọi 4 đến 10 $ http nhận cuộc gọi song song. Nhưng sau khi hành động tìm kiếm của người dùng tôi cần hiển thị cho cùng một chế độ xem nhưng với kết quả khác nhau. Tôi tập hợp dữ liệu và các cuộc gọi truy vấn $ http mới. Nhưng các lời gọi $ http trước đó (lời hứa) vẫn còn phổ biến hoặc đang hoạt động, ảnh hưởng đến phạm vi $.

giải pháp bẩn càng tốt của tôi là ..

Sử dụng trang mà có thể có các khu vực năng động điều khiển bởi một ứng dụng động đa ứng dụng (multimodule). Khi sự kiện của người dùng xóa phần tử tương ứng với sự kiện. Ví dụ, kết quả tìm kiếm, nếu tôi muốn hiển thị kết quả từ các nguồn khác nhau bằng cách sử dụng các cuộc gọi $ http khác nhau. Nếu người dùng tìm kiếm bằng từ khóa mới, tôi sẽ xóa phần tử kết quả ng-app và phần tử khởi động mới.

Trả lời

26

Bạn nên sử dụng phiên bản 1.1.5, trong đó có khả năng hủy bỏ $ http yêu cầu:

https://github.com/angular/angular.js/blob/master/CHANGELOG.md

// set up a dummy canceler 
var canceler = $q.defer(); 

// use it as a timeout canceler for the request 
$http({method: 'GET', url: '/some', timeout: canceler.promise}).success(
    function (data) { alert("this won't be displayed on cancel"); } 
).error(
    function (data) { alert("this will be displayed on cancel"); } 
) 

// now, cancel it (before it may come back with data) 
$rootScope.$apply(function() { 
    canceler.resolve(); 
}); 

bạn có thể sử dụng Canceler tương tự cho tất cả các yêu cầu, và giải quyết nó ngay trước khi bắt đầu tập mới.

+1

Đây chính xác là những gì tôi đang tìm kiếm. Cảm ơn sự cập nhập của bạn. –

+0

Tôi cũng vậy - liên kết cho 1.1.5 CHANGELOG là https://github.com/angular/angular.js/commit/5cc9837d931dfb2d374bef24688888e0c52c75d1 – Phantomwhale

+0

Có mẫu tái sử dụng cho điều này không? Tôi muốn hủy quá trình xử lý xảy ra sau khi kết quả cũng được tìm nạp. – user239558

Các vấn đề liên quan