任何人都可以在此代码中看到任何错误吗? 我在我的应用程序中使用这种方法,几乎完全相同,但由于某种原因,我似乎无法解决主要的承诺“a”;
Parser.prototype.insertSomeData = function(data)
{
var a = $.Deferred(),
table = "Example",
columns = ["col1", "col2", "col3"];
var deferreds = [];
// insert Data into the database
for (var i = 0; i < data.length; i++)
{
var dfd = $.Deferred();
deferreds.push(dfd.promise());
item = data[i];
database.insert(table, columns, [item.one, item.two, item.three], function(){console.log("resolved"); dfd.resolve()}, dfd.reject);
}
$.when.apply(null, deferreds).then(function(){console.log("it worked!"); a.resolve()});
return a.promise();
}
延迟数组中的promise都会得到解决。所以我认为问题出现在when
任何看到我缺少的东西?
答案 0 :(得分:2)
dfd.resolve
,但这不仅仅是获取功能。您必须将其称为:dfd.resolve()
。a
,而不是dfd
。 $.when
完成后,所有dfd
都已解决,您可能希望在这种情况下解决主延迟(a
)。答案 1 :(得分:0)
deferreds
只包含来自dfd
对象的承诺,因此它们就是得到解决的。