IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Attendre la fin de l'execution d'une fonction


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 201
    Points : 96
    Points
    96
    Par défaut Attendre la fin de l'execution d'une fonction
    Bonjour,

    Mon script dispose de plusieurs fonction dont certaines doivent s'executer au debut.

    Je soupsonne mon script de commencer a executer en parallele d'autre fonction alors que la premiere n'a toujours pas termine, car j'ai des erreurs qui correspondent a cette logique. Voici un exemple:

    function1 : remplir un tableau avec 1000 valeurs
    function2 : afficher tableau[752]

    Defois ca marche, d'autres fois j'ai une erreurs comme quoi la valeur n'existe pas. Je me demande donc si defois la tableau est pas finit de remplir alors qu'il essaye deja de recuperrer la valeur...

    Deja est-ce possible ? et ensuite Y a-t-il moyen d'attendre d'etre sur que la fonction1 ait finit de s'executer avant de lancer la function2 ?

    Merci.
    Sebastien.

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Essaye en appelant la fonction 2 à la fin de la fonction 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function fonction1(){
    // Tu remplis ton tableau
    fonction2(nombre);
    }
    function fonction2(nombre){
    // Tu affiches la valeur souhaitée
    }

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 644
    Points : 66 671
    Points
    66 671
    Billets dans le blog
    1
    Par défaut
    +1 Beef
    sinon il faudrait modifier un flag à la fin de la première et avoir un setInterval qui joue le role d'aiguilleur et ne lance la fonction qu'après modif du flag ...

  4. #4
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par metalcoyote Voir le message
    Je me demande donc si defois la tableau est pas finit de remplir alors qu'il essaye deja de recuperrer la valeur...

    Deja est-ce possible ?
    le code est exécuté séquentiellement, donc je ne vois pas comment c'est possible si tu n'utilises pas de timer dans ta 1ere fonction, à moins d'avoir différents threads (et le multithreading n'existe pas en javascript de base)

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 644
    Points : 66 671
    Points
    66 671
    Billets dans le blog
    1
    Par défaut
    BSS javascript fonctionne en bulle pas en sequentiel au niveau des fonctions ...

  6. #6
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 201
    Points : 96
    Points
    96
    Par défaut
    J'ai essaye la methode bovine mais ca n'a pas l'air de marcher.

    Je vais me renseigner sur le setInterval. Je connais pas cette methode...

    Merci.

  7. #7
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    il faudrait modifier un flag à la fin de la première et avoir un setInterval qui joue le role d'aiguilleur et ne lance la fonction qu'après modif du flag ...

    sinon, je propose d'utiliser les evènements. Qu'en pensez-vous ?

  8. #8
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    ben oui; typiquement, fonction 2 doit intervenir "onload";

  9. #9
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 201
    Points : 96
    Points
    96
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    BSS javascript fonctionne en bulle pas en sequentiel au niveau des fonctions ...
    C'est quoi en bulle ?

    sinon, je propose d'utiliser les evènements. Qu'en pensez-vous ?
    C'est quoi les evenements ? lol

    Jvais regarder ca de plus pres

  10. #10
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Salut,

    Le tableau, tu le remplis pas via un service web (asynchrone) par pur hasard en passant comme ça?

  11. #11
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 201
    Points : 96
    Points
    96
    Par défaut
    Euh si

    J'utilise un XMLHttpRequest pour recuperer les infos, et je remplis, j'ai plusieurs fonctions comme ca...

  12. #12
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Exécute ta fonction au retour de ta requête : http://gael-donat.developpez.com/web/intro-ajax/#LIII-B

  13. #13
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 201
    Points : 96
    Points
    96
    Par défaut
    Je vais voir ce de plus pres.

    Voici mon code...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    function fonction1(){
    		var txtFile = new XMLHttpRequest();
    			txtFile.open("GET", "./valeurs.dat", true);
    			txtFile.send(null);
    			txtFile.onreadystatechange = function() {
    			  if (txtFile.readyState === 4) {  
    			      allText = txtFile.responseText;
    			      lines = txtFile.responseText.split("\n");
    			       for(var i=0; i<=lines.length;i++){
    			       		tab = lines[i].split(":");
    			       		monTableau[tab[0]] = tab[1]+":"+tab[3];
    			       }
    			   }
    			}
     
    			function2();
    	}

  14. #14
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Décembre 2008
    Messages : 46
    Points : 52
    Points
    52
    Par défaut Et comme ça, ça marche ?
    Essaie ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function fonction1(){
    		var txtFile = new XMLHttpRequest();
    			txtFile.open("GET", "./valeurs.dat", true);
    			txtFile.send(null);
    			txtFile.onreadystatechange = function() {
    			  if (txtFile.readyState === 4) {  
    			      allText = txtFile.responseText;
    			      lines = txtFile.responseText.split("\n");
    			       for(var i=0; i<=lines.length;i++){
    			       		tab = lines[i].split(":");
    			       		monTableau[tab[0]] = tab[1]+":"+tab[3];
    			       }
    				function2();
    			   }
    			}
     
    	}
    ou ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function fonction1(){
    		var txtFile = new XMLHttpRequest();
    			txtFile.open("GET", "./valeurs.dat", false);
    			txtFile.send(null);
    			allText = txtFile.responseText;
    			lines = txtFile.responseText.split("\n");
    			for(var i=0; i<=lines.length;i++){
    			       tab = lines[i].split(":");
    			       monTableau[tab[0]] = tab[1]+":"+tab[3];
    			}
    			function2();
     
    	}
    Saray

  15. #15
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 201
    Points : 96
    Points
    96
    Par défaut
    Non plus

    J'ai meme mis toutes les fonctions en une, pour que ca ressemble a du sequentiel et toujours pas

    Pourtant ca me parrait pas dur ce que je demande
    Comprends plus...

  16. #16
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Ca ne nous aide pas à t'aider. Etant plutôt feignant, je t'encourage vivement à nous fournir un code minimaliste et directement utilisable par nos soins illustrant ton problème.
    Faire ça nous simplifiera la vie pour t'aider, mais surtout te forcera à décomposer le problème. Ca m'arrive souvent de vouloir poster sur le forum et de résoudre mon problème avant de poster en me forçant à faire cette illustration minimaliste.

  17. #17
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 644
    Points : 66 671
    Points
    66 671
    Billets dans le blog
    1
    Par défaut


    comme expliqué précédemment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <script type='text/javascript'>
    var BigTab=new Array()
    function one(){
    BigTab=new Array()
    for(i=0;i<10000;i++){
     
    BigTab[i]=Math.ceil(Math.random()*i)
    }
    }
    function two(indice){
    var check=setInterval(function(){
      if(BigTab[indice]){clearInterval(check);
                     alert(BigTab[indice])}},10)
                     }
     
    one();
    two(5000);
     
    </script>

  18. #18
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    J'insiste: si la requête xhr est lancée automatiquement (sans demande utilisateur), onload fera l'affaire pour fonction 2();

Discussions similaires

  1. Attendre la fin de l'exécution d'une instruction?
    Par mhanyu dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 23/08/2007, 17h41
  2. Forcer la fin de l'execution d'une fonction
    Par Valkirion dans le forum C++
    Réponses: 7
    Dernier message: 10/08/2007, 15h32
  3. Attendre la fin de l'execution d'une fonction
    Par Invité dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 20/04/2007, 11h33
  4. Réponses: 4
    Dernier message: 24/01/2007, 01h48
  5. Réponses: 3
    Dernier message: 22/10/2004, 13h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo