2011-05-12 10 views
3

J'ai ce code javascript:exécuter la fonction après l'autre

if (direction !== "leftnav") { 
// DO THINGS 
}; 
setTimeout(function() { 
//DO OTHER THINGS AFTER THE FIRST THING 
}, 1000); 

Est-il possible d'exécuter la fonction de 2e après la première au lieu d'avoir à utiliser un événement de délai d'attente?

merci beaucoup pour votre aide :)

+0

Je ne comprends pas le problème; pourquoi ne pouvez-vous pas simplement inclure "// AUTRES CHOSES APRES LA PREMIERE CHOSE" dans le bloc "if"? –

+0

Besoin de plus d'exemple de code pour répondre à cette question. Est-ce que vous faites un appel AJAX dans le premier '' DO THINGS'? Si c'est le cas, vous utiliserez simplement un ['callback'] (http://api.jquery.com/jQuery.ajax/). – pixelbobby

+0

if (direction! == "leftnav") { // FAIRE DES CHOSES // FAIRE D'AUTRES CHOSES APRÈS LA PREMIÈRE CHOSE } –

Répondre

8

Oui, c'est possible. Voici un exemple utilisant le seul code que vous avez fourni:

if (direction !== "leftnav") { 
    // DO THINGS... 

    // THEN 
    doOtherThings(); 

    // THEN 
    doMoreThings(); 
}; 

var doOtherThings = function(){ 
    //DOING OTHER THINGS 
} 
var doMoreThings = function(){ 
    //DO EVEN MORE THINGS 
} 
+4

pas d'upvotes? Aw, vous êtes les gars d'aujourd'hui:] – pixelbobby

7

Javascript se déroulera du haut en bas si ce que vous avez en ce que si la déclaration bloque. Si c'est le cas, vous pouvez juste placer le code juste en dessous de l'instruction if, en dehors d'un délai d'expiration et il fonctionnera normalement. Si c'est asynchrone, vous pouvez utiliser un rappel qui se déclenche lorsque la première fonction est terminée pour démarrer la deuxième fonction.

L'exemple fourni ci-dessous n'est pas vraiment une manière efficace de faire les choses, mais est plus utilisé pour illustrer de quoi je parle ci-dessus. Dans la fonction write(), vous pouvez effectuer un appel AJAX ou attendre que l'utilisateur clique sur quelque chose ou quoi que ce soit. L'interprète continue à la ligne suivante quelle section qui va écrire tout de suite, et dans l'ordre de blocage.

JS

var write = function (v, cb) { 
    setTimeout(function() { 
     document.write(v); 
     cb && cb(); 
    }, 1000); 
} 

if (true) { 
    write("I'm not blocking, blah<br/>", function() { 
     document.write("Running<br/>"); 
    }); 
} 

if (true) { 
    document.write("I'm blocking, blah<br/>"); 
} 
document.write("Running<br/>"); 

Sortie

I'm blocking, blah 
Running 
I'm not blocking, blah 
Running 

http://jsfiddle.net/robert/vvmyk/

+1

+1 pour un article sympa. – pixelbobby

0

Vous avez juste besoin d'appeler des fonctions avec l'ordre que vous voulez

function foo(){ 
//code 
} 

function bar(){ 
//other 
} 

bar(); 
foo(); 

Comme ceci, bar sera appelé avant foo.

Questions connexes