在jQuery异步执行的嵌套.each()循环问题

时间:2014-11-30 09:22:28

标签: javascript jquery

我有两个嵌套的每个循环,如此。

    $.each(a, function(index1, value1){
        console.log(value1)
        $.each(b, function(index2, value2){
             console.log(value2);
        }
    }

我期待的输出是

    a0
    b0
    b1
    b2
    a1
    b0
    b1
    b2
    etc

但我实际得到的是

    a0
    a1
    a2
    b0
    b1
    b2
    etc

如何实现我想要的输出。我知道延迟对象现在已经实现了,我可以在我声明的函数上使用延迟对象定义函数和执行,但我不确定如何在现有函数上执行此操作。

编辑:我搞砸了,抽得太多了。

getAByX(x, function () {
            $.each(A, function (index, value) {
                full_list += "string with info";
                full_list += table_header;
                getBByA(value, function () {
                    $.each(B, function (index2, value2) {
                        full_list += "string with info";
                    });

                });

            });
            $(".table").append(full_list);
            hideLoading();
        });

这是修剪过的完整代码,它是乱码的函数调用,$ .each循环同步执行。

编辑2:修复了原始短代码中的错误。此外,由于第一段代码工作,这意味着$ .each循环同步执行,它是我异步执行的函数调用。这种实现使得初始问题无效,因为$ .each调用具有适当的行为。

2 个答案:

答案 0 :(得分:2)

你的代码搞砸了。这是问题所在:

$.each(a, function(index, value) {
    console.log(a)

请注意,您正在打印a,而不是value。您每次通过循环打印整个数组的值,而不是您正在迭代的项目。

这与延迟或异步无关。

答案 1 :(得分:1)

您应该打印value而不是ab

var a = ['a0', 'a1', 'a2'];
var b = ['b0', 'b1', 'b2'];
$.each(a, function(index, value){
    console.log(value) //console value instead of a
    $.each(b, function(index, value){
        console.log(value); //console value instead of b
    });
});

也可以尝试使用map()

a.map(function(val, ond){
    console.log(val);
    b.map(function(v, k){
        console.log(v);
    });
});