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à lược đồ, cuối cùng khởi tạo ứng dụng với lược đồ và 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 thực theo lược đồ và được hiển thị. Khi người dùng CRUD dữ liệu, các lược đồ cung cấp xác thực thông qua đầu tiên.
Tôi đang gặp vấn đề với việc khởi tạo. Tôi sử dụng một lệnh gọi Ajax để tìm nạp đố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 đó làm việc. Tôi thấy tìm nạp trong giao diện điều khiển.
Sau đó tôi thấy tìm nạp cho tất cả các lược đồ, vì vậy mỗi lệnh gọi $ .ajax () hoạt động. fetchschemas () thực sự trả về một loạt các lời hứa.
Tuy nhiên, mệnh đề cuối cùng khi () không bao giờ kích hoạt và từ "DONE" không bao giờ xuất hiện trên bảng điều khiển. Mã nguồn cho jquery-1.5 dường như ngụ ý rằng "null" được chấp nhận là một đối tượng để chuyển đến $ .when.apply (), vì khi () sẽ xây dựng một đối tượng Deferred () bên trong để quản lý danh sách nếu không có đối tượng nào thông qua tại.
Điều này đã làm việc bằng Futures.js. Làm thế nào một mảng của Trì hoãn jQuery đượ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);
});
});