Câu hỏi:Trình tự hứa trong AngularJS
Có một cách "dễ dàng" để hủy bỏ ($q
-/$http
-) hứa hẹn trong AngularJS hoặc xác định thứ tự trong đó hứa hẹn đã được giải quyết?
Ví dụ
Tôi có một tính toán lâu chạy và tôi yêu cầu kết quả qua $http
. Một số hành động hoặc sự kiện yêu cầu tôi phải khởi động lại phép tính (và do đó gửi yêu cầu $http
mới) trước khi lời hứa ban đầu được giải quyết. Do đó tôi tưởng tượng tôi không thể sử dụng thực hiện đơn giản như
$http.post().then(function(){
//apply data to view
})
vì tôi không thể đảm bảo rằng các câu trả lời trở lại theo thứ tự mà tôi đã gửi yêu cầu - sau tất cả tôi muốn hiển thị kết quả của tính toán mới nhất khi tất cả các lời hứa đã được giải quyết đúng cách.
Tuy nhiên tôi muốn tránh chờ đợi câu trả lời đầu tiên cho đến khi tôi gửi một yêu cầu mới như thế này:
const timeExpensiveCalculation = function(){
return $http.post().then(function(response){
if (isNewCalculationChained) {return timeExpensiveCalculation();}
else {return response.data;}
})
}
Suy nghĩ:
Khi sử dụng $http
tôi có thể truy cập vào config- đối tượng trên phản hồi để sử dụng một số dấu thời gian hoặc các số nhận dạng khác để tự sắp xếp các câu trả lời đến. Tuy nhiên tôi đã hy vọng tôi chỉ có thể nói góc cạnh bằng cách nào đó để hủy bỏ một lời hứa đã lỗi thời và do đó không chạy hàm .then() khi nó được giải quyết.
Điều này không hoạt động nếu không có triển khai thủ công cho $q
-promises thay vì $http
.
Có lẽ chỉ từ chối lời hứa ngay là con đường để đi? Nhưng trong cả hai trường hợp nó có thể mất mãi mãi cho đến khi cuối cùng một lời hứa được giải quyết trước khi yêu cầu tiếp theo được tạo ra (dẫn đến một cái nhìn trống trong thời gian chờ đợi).
Có một số chức năng API góc mà tôi đang thiếu hoặc có các mẫu thiết kế mạnh mẽ hoặc "thủ thuật" với chuỗi lời hứa hoặc $ q.all để xử lý nhiều lời hứa trả lại dữ liệu "giống nhau" không?
Không chắc chắn bạn đang sử dụng API nào nhưng trong api .Net của tôi, tôi đã sử dụng SignalR để xử lý các tình huống như thế này. – jbrown
Câu hỏi hay, mong được trả lời. Nhưng nó sẽ không dễ dàng hơn để xử lý logic bên trong .then thay vì cố gắng tránh lời hứa được giải quyết? – user2263572
Có thể trùng lặp [Hứa hẹn - có thể buộc hủy lời hứa] (http://stackoverflow.com/questions/30233302/promise-is-it-possible-to-force-cancel-a-promise) –