不能填充数组

|
function draw(data)
{
var i = 0;
var checkduplicates = new Array();
drawOne(i);
//console.log(checkduplicates) Problem!!!;

function drawOne(i)
{
         //photos is a object that has been omitted for simplicity
    var picinfo = photos[Math.floor(Math.random()*photos.length)];
    checkduplicates.push(picinfo);

    img.onload = function()
    {
        var ctx = document.getElementsByClassName(\"canvas\")[i].getContext(\'2d\');
        // Draw pieces
        ctx.drawImage(img,0,0,132,150);
        //ctx.fillText(\"haha\",0,0);
        ctx.drawImage(frame,0,0,133,152);
        i++;
        if (i != canvaslength)
        {
             drawOne(i);
        }
    }
    //console.log(checkduplicates.length);
}
}
嘿,我在draw函数中声明了drawOne函数,以便内部函数drawOne可以访问局部变量checkduplicates。但是,在drawOne函数运行16次之后,应该用对象填充数组checkduplicates,这由drawOne内的console.log证明,该数组显示数组中有16个对象。但是,我用\“ Problem \”标记的console.log函数显示该数组只有第一个对象,而其他console.logs显示该数组充满了对象。我不明白为什么修改数组的唯一方法是通过\“ push \”方法,该方法已被调用了16次,如果我注释掉img.onload部分,则使用注释\“ problem \ ”显示数组中已满对象。为了简化起见,我特意省略了其他代码,而我的萤火虫也没有抱怨虫子。谢谢
已邀请:
当您使用异步递归时,第一次迭代后将返回对
drawOne
的初始调用。加载第一个图像时,以及退出
draw
函数后,迭代将继续进行,以便浏览器重新获得控制权,使其可以处理事件。 因此,在第一次迭代后数组仅包含单个项目根本不是问题,这是您使用的迭代方法的预期结果。

要回复问题请先登录注册