JQuery Array of Deferreds,实现不起作用

时间:2012-08-23 09:28:07

标签: javascript jquery jquery-deferred

任何人都可以在此代码中看到任何错误吗? 我在我的应用程序中使用这种方法,几乎​​完全相同,但由于某种原因,我似乎无法解决主要的承诺“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任何看到我缺少的东西?

2 个答案:

答案 0 :(得分:2)

  1. 您编码dfd.resolve,但这不仅仅是获取功能。您必须将其称为:dfd.resolve()
  2. 完成所有延期后,您可能希望解析a,而不是dfd$.when完成后,所有dfd都已解决,您可能希望在这种情况下解决主延迟(a)。

答案 1 :(得分:0)

deferreds只包含来自dfd对象的承诺,因此它们就是得到解决的。