Tôi có một ứng dụng yêu cầu dữ liệu được tải theo một thứ tự nhất định: URL gốc, sau đó là các lược đồ, sau đó cuối cùng khởi tạo ứng dụng với các lược đồ và các url cho các đối tượng dữ liệu khác nhau. Khi người dùng điều hướng ứng dụng, các đối tượng dữ liệu được tải, xác nhận hợp lệ với lược đồ và được hiển thị. Khi người dùng CRUDs dữ liệu, các lược đồ cung cấp xác thực thông qua đầu tiên.Làm thế nào để bạn làm việc với một mảng jQuery hoãn lại?
Tôi gặp sự cố khi khởi chạy. Tôi sử dụng một cuộc gọi Ajax để lấy đối tượng gốc, $ .when(), và sau đó tạo một mảng các lời hứa, một cho mỗi đối tượng lược đồ. Điều đó hoạt động. Tôi thấy tìm nạp trong bảng điều khiển.
Sau đó tôi thấy tìm nạp cho tất cả các lược đồ, do đó, mỗi lệnh $ .ajax() hoạt động. fetchschemas() thực sự trả về một loạt các lời hứa.
Tuy nhiên, điều khoản cuối cùng khi() không bao giờ kích hoạt và từ "XONG" không bao giờ xuất hiện trên bảng điều khiển. Mã nguồn để jquery-1.5 có vẻ ngụ ý rằng "null" được chấp nhận như một đối tượng để truyền tới $ .when.apply(), như khi() sẽ xây dựng một đối tượng Deferred() nội bộ để quản lý danh sách nếu không có đối tượng nào được chuyển giao.
Điều này đã làm việc khi sử dụng Futures.js. Làm thế nào nên một mảng jQuery Deferreds được quản lý, nếu không như thế này?
var fetch_schemas, fetch_root;
fetch_schemas = function(schema_urls) {
var fetch_one = function(url) {
return $.ajax({
url: url,
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json"
});
};
return $.map(schema_urls, fetch_one);
};
fetch_root = function() {
return $.ajax({
url: BASE_URL,
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json"
});
};
$.when(fetch_root()).then(function(data) {
var promises = fetch_schemas(data.schema_urls);
$.when.apply(null, promises).then(function(schemas) {
console.log("DONE", this, schemas);
});
});
Tôi đã gần như một vấn đề giống hệt nhau, ngoại trừ tôi cần phải bắn một phương pháp "thành công" cho mỗi truy vấn ajax trong fetch_one, trước khi "DONE" được in. Làm thế nào bạn sẽ đi về việc này? Tôi đã thử sử dụng .pipe sau "fetch_one", nhưng điều đó dường như không hoạt động. – CambridgeMike