我有一个应用程序,要求按特定顺序加载数据:根 URL,然后是架构,最后使用各种数据对象的架构和 url 来初始化应用程序。当用户浏览应用程序时,数据对象将被加载、根据架构进行验证并显示。当用户对数据进行 CRUD 操作时,模式会提供首次验证。
我在初始化时遇到问题。我使用 Ajax 调用来获取根对象 $.when(),然后创建一组 Promise,每个 Promise 对应一个。这样可行。我在控制台中看到了提取。
然后我看到所有模式的获取,因此每个 $.ajax() 调用都有效。 fetchschemas() 确实返回了一个 Promise 数组。
然而,最后的when()子句永远不会触发,并且“DONE”一词永远不会出现在控制台上。 jquery-1.5 的源代码似乎暗示“null”作为传递给 $.when.apply() 的对象是可以接受的,因为如果没有对象,when() 将构建一个内部 Deferred() 对象来管理列表通过了。
这是使用 Futures.js 实现的。如果不是这样的话,应该如何管理 jQuery Deferreds 数组?
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);
});
});