缺陷的JQuery数组,实现不起作用

JQuery Array of Deferreds, implementation not working

本文关键字:实现 不起作用 数组 JQuery 缺陷      更新时间:2023-09-26

有人能看到这段代码中的任何错误吗?我在整个应用程序中使用这种方法,几乎完全相同,但由于某种原因,我似乎根本无法解决主要承诺"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上。看到我遗漏的东西了吗?

  1. 您对dfd.resolve进行了编码,但这只不过是获取函数。你必须称之为:dfd.resolve()
  2. 当所有延迟都完成后,您可能想要解析a,而不是dfd。当$.when完成时,所有dfd都已解析,在这种情况下,您可能希望解析主延迟(a

deferreds只包含来自dfd对象的promise,因此它们是要解析的。