2009-12-21 5 views
2

si je Révolutionnez 2 fonctions comme ceci:exécuter une autre fonction après que la fonction précédente est terminée?

prepare_data(); 
read_data(); 

alors je suppose qu'ils sont en cours d'exécution en même temps. mais comme vous pouvez le voir, la fonction deux dépend de la première, alors comment puis-je faire fonctionner cette dernière après la fin de la première?

+4

Qu'est-ce qui vous fait pense qu'ils courent en même temps? –

+0

je pensais juste qu'ils étaient ... mais c'est bon qu'ils ne le font pas, tout comme dans php :) – ajsie

+0

mais si vous avez 2 gestionnaires d'événements jquery sur un élément DOM. disons $ (a) .click ... lequel sera exécuté en premier? celui ci-dessus ou courent-ils en même temps? – ajsie

Répondre

10

Javascript, et la plupart des autres langages, exécutent le code de manière séquentielle.

Par conséquent, ils vont pas tous les deux s'exécutent en même temps.

En fait, il n'est pas possible d'exécuter deux morceaux différents de code Javascript en même temps. Cependant, dans de nombreuses autres langues, il est possible d'utiliser des threads. Toutefois, s'ils effectuent des appels AJAX, le code côté serveur correspondant appelé par les deux fonctions s'exécutera simultanément.
Pour éviter cela, vous devez faire en sorte que la première fonction accepte un paramètre de rappel et lui transmette la deuxième fonction.

+0

Je voudrais juste me débarrasser de "et la plupart des autres langues" là-bas. Trop de balayer une remarque .... –

+2

Êtes-vous en désaccord? Existe-t-il des langages qui exécutent toutes les instructions en parallèle? – SLaks

+0

@SLaks: bon retour de strawman là-bas;) Tout ce que je voulais dire, c'est que la phrase est un peu non spécifique et un peu trompeur là-bas. Vos trucs sur les discussions et les rappels sont ce que je pense que vous étiez en train de faire. –

4

Je suppose que le premier appel effectue une sorte d'appel asynchrone sur lequel le second s'appuie car sinon les deux fonctions s'exécuteront séquentiellement.

Si c'est le cas, vous devez effectuer la seconde dans le rappel à partir du premier. Par exemple, dans jQuery:

function prepare_data() { 
    $("#data").load("/load_data.php", function() { 
    read_data(); 
    }); 
} 

Il est impossible de dire comment vous devez résoudre ce sans plus d'informations si vous utilisez la vanille Javascript ou une bibliothèque particulière. Cependant, je suggère fortement d'utiliser une bibliothèque pour AJAX.

1

@SLaks

En fait, il est impossible d'exécuter deux différents morceaux de code Javascript à en même temps. Cependant, dans de nombreuses autres langues, il est possible d'utiliser les threads .

Est-ce complètement correct? ne pouvez-vous exécuter javascript parallèlement en utilisant des web workers?

http://www.w3.org/TR/2009/WD-workers-20090423/

https://developer.mozilla.org/En/Using_web_workers

+0

oui, vous me battez dessus. –

+0

Dans IE, c'est. Dans Firefox, ce n'est pas le cas. – SLaks

2

Peut être que vous voulez appeler la fonction deuxième après la première fonction de fonction à exécuter avec succès, le cas échéant, vous pouvez le faire en ce

$('button').click(function() 
{ 
    function1(someVariable, function() { 
     function2(someOtherVariable); 
    }); 
}); 


function function1(param, callback) { 
    alert('Now first function will be called.'); 
    callback(); 
} 
Questions connexes