1

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

延迟数组中的两个承诺都得到了解决。所以我认为问题出在when任何看到我遗漏的东西?

4

2 回答 2

2
  1. 您编写了代码dfd.resolve,但这只是获取函数而已。您必须将其称为:dfd.resolve().
  2. 当所有延迟都完成后,您可能想要解决a,而不是dfd。完成$.when后,所有dfds 都已解决,a在这种情况下,您可能希望解决 master deferred ( )。
于 2012-08-23T09:36:14.220 回答
0

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

于 2012-08-23T09:32:13.763 回答