2010-06-02 3 views
1

Je souhaite parcourir en boucle un objet contenant des fonctions qui s'exécuteront l'une après l'autre. Mon approche la plus idéale serait d'avoir cette chaîne en quelque sorte (c'est-à func2 attend func1 et func3 attend func2) mais cela doit se produire dynamiquement et les fonctions auront toutes des durées différentes. J'utilise jQuery alors j'ai pensé que peut-être "queue()" peut aider mais je n'ai pas beaucoup travaillé avec.Appel de plusieurs fonctions séquentiellement avec jquery

A main concern est d'ajouter aucune portée/callback aux fonctions dans l'objet. Je préfère les inclure dans une fonction parent pour les exécuter dans la boucle afin de créer le callback/chaining.

Voici un exemple de ce que j'ai maintenant, mais abruti. Merci pour toute aide!

var obj = [ 
{'name':'func1','callback':function(){ alert(1); }}, 
{'name':'func2','callback':function(){ alert(2); }}, 
{'name':'func3','callback':function(){ alert(3); }} 
]; 

$.each(obj, function(x, el) { 
    el.callback(); 
}); 
+0

Je ne suis pas. Est-ce que obj est l'entrée correcte, ou est-elle mal structurée? Quel est exactement le problème avec le code ci-dessus (en dehors des 3 fonctions elles-mêmes étant trivial)? –

+0

Le problème est que les fonctions se produisent de manière asynchrone plutôt que l'une après l'autre. Je ne saurai pas non plus combien de fonctions sont dans l'objet, donc je ne veux pas/ne peux pas les enchaîner de manière statique. – darcy

+0

Non, ils ne le font pas. Dans le code ci-dessus, ils sont garantis dans l'ordre. –

Répondre

1

Essayez ceci:

var obj = [ 
    function() { alert(1); }, 
    function() { alert(2); }, 
    function() { alert(3); } 
]; 
$.each(obj,function() { 
    // Replace 500 with whatever you want 
    setTimeout(this,500); 
}); 

Vous pouvez également utiliser une boucle for, car il n'y a aucune raison d'utiliser $.each, bien qu'il n'y a pas de problème:

for (var i = 0; i < obj.length; i++) { 
    // Replace 500 with whatever you want 
    setTimeout(this[i],500); 
} 

Cela dépend aussi si vous voulez avoir un timing différent en fonction de la fonction que vous exécutez.

est ici pour une boucle for:

for (var i = 0; i < obj.length; i++) { 
    // Replace 500 with whatever you want 
    setTimeout(this[i],500 * i); 
} 

Et avec $.each:

$.each(obj,function(i) { 
    // Replace 500 with whatever you want 
    setTimeout(this,500 * i); 
}); 
Questions connexes