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