tôi có hai chức năng javascript, save()
và saveAll()
, thiết lập như sau:nâng deferred.then jquery() một lần tất cả các đối tượng hoãn lại đã được giải quyết
function save(data) {
return $.post('/save', data);
}
function saveAll(callback) {
var dataArray = [];
$.each(dataArray, function() {
save(this);
});
callback();
}
tôi quan tâm trong việc sửa đổi saveAll()
để nó thúc đẩy đối tượng jquery deferred, và tăng hàm callback
khi tất cả các hoạt động save()
đã hoàn tất. tuy nhiên, tôi không chắc chắn về cú pháp chính xác ... cụ thể là liên quan đến $ .each() bên trong của $ .when(). nó sẽ là một cái gì đó như thế này?
function saveAll(callback) {
var dataArray = [];
$.when(
$.each(dataArray, function() {
return save(this);
})
).then(callback);
}
Điều này thật tuyệt vời, chỉ tìm kiếm điều này. Tôi ngạc nhiên jQuery không cho phép một mảng các đối tượng trì hoãn một cách tự nhiên. –
Chỉ cần cẩn thận, bởi vì một thực tế ít được biết về $ .when là nó sẽ ngay lập tức giải quyết nếu bất kỳ một trong các đối số bị từ chối/thất bại, mà không cần chờ đợi phần còn lại! Đó là sự thật :) Và bất ngờ, nếu bạn hỏi tôi. Tôi đã viết $ .whenAll() luôn đợi tất cả các đối số để giải quyết, bất kể trạng thái thành công/thất bại: http://jsfiddle.net/InfinitiesLoop/yQsYK/ – InfinitiesLoop