2011-04-19 3 views
0
var checkduplicates = new Array(); 
drawOne(i); 
//console.log(checkduplicates) 

function drawOne(i) 
{ 
    //randomly select one photo 
    var picinfo = photos[Math.floor(Math.random()*photos.length)]; 
    //check duplicates pic, if duplicates exist, get another one 
    while(checkduplicates.indexOf(picinfo)!=-1||picinfo.title.length>10) 
    { 
     picinfo = photos[Math.floor(Math.random()*photos.length)]; 
    } 
    checkduplicates.push(picinfo); 

    var ctx = document.getElementsByClassName("canvas")[i].getContext('2d'); 
    var img = new Image(); 
    //get the pic URL 
    img.src = "http://farm" + picinfo.farm + ".static.flickr.com/" 
    + picinfo.server + "/" + picinfo.id + "_" + picinfo.secret + "_m.jpg"; 

    img.onload = function() 
    { 
     // Draw pieces 
     ctx.drawImage(img,0,0,132,150); 
     ctx.drawImage(frame,0,0,133,152); 
     if(picinfo.title=="") 
      $("#"+i).append("Untitled"); 
     else 
      $("#"+i).append(picinfo.title); 

     i++; 
     if (i != canvaslength) 
     { 
      drawOne(i); 
     } 
    } 

Ce que je fais ici est que je suis générer dynamiquement des images pour remplir 16 toile et certaines personnes ont dit que j'utilise récursion asynchrone que je DonT même remarque. J'ai essayé d'utiliser la boucle au lieu de la récursivité mais en quelque sorte fini par obtenir exception que je ne sais pas comment réparer. Donc je m'en tiens à la récursivité. Cependant, mon problème est que comment je peux détecter la fin de la récursion comme la ligne commentée montre qu'il n'y a qu'un seul élément dans le tableau.détecter la fin de la récursivité asynchrone

//console.log(checkduplicates) 

et l'explication que je suis arrivé est que je comprends, le console.log commenté est exécuté avant un groupe de récursion de la fonction drawOne terminé Mais ce que je voulais était que je voulais les 16 images complètes pour être à pleine charge puis sélectionnez-les afin que je puisse faire quelque chose avec eux. Par conséquent, la question est de savoir comment je peux détecter la fin de la récursion. Je vous remercie. Vous êtes invités à ignorer la plupart de mes codes et à regarder la partie récursive.

Répondre

0

Il ne s'agit pas d'une "récursivité asynchrone". Cela impliquerait qu'au moins deux de ces boucles tournent en même temps et qu'elles reviennent de manière asynchrone. Ce qui n'est tout simplement pas le cas.

Fondamentalement, la seule fois où vous arrêtez la récursion est quand i == canvaslength.

Donc, prenez cette instruction if.

if (i != canvaslength) 
{ 
    drawOne(i); 
}else{ 
    console.log('recursion is done') // do what you want here. 
} 
Questions connexes