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 :

Utilisation de 2 fonctions setInterval successives


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 13
    Points
    13
    Par défaut Utilisation de 2 fonctions setInterval successives
    Le processus javascript que je dois mettre en place se découpe en 2 phases successives demandant l'exécution de traitements côté serveur. Les traitements effectués lors de ces 2 phases passent chacun par une pile d'attente.

    Je pensais donc utiliser une première fois la fonction setInterval pour vérifier la fin de la première phase puis une seconde fois pour vérifier la fin de la seconde.

    Mais ça ne marche pas. Voici le cas de test que j'ai fait pour voir ce qui se passait : je mets a jour un composant text dans ma page pour voir dans quel ordre s'exécutent les actions (nous utilisons une taglib propriétaire, les mises à jour du composant text se font donc à l'aide de méthodes js propriétaires mais le problème n'est pas là)


    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    // Variable utilisé pour les appels de fonctions à intervalles réguliers
    var t_timerA = null;
    var t_timerV = null;
    var timerA = 0;
    var timerV = 0;
     
    function testInterval() {
    	var obj = mainView.a_searchChildById("avancement");
    	obj.a_setText("");
     
    	var interval = 1000;
    	appelA(interval);
    	appelV(interval);
     
    	var tmp2 = obj.a_getText();
    	tmp2 = tmp2 + "/" + "STOP";
    	obj.a_setText(tmp2);
    }
     
    function appelA(interval) {
    	// POUR LES TESTS
    	var obj = mainView.a_searchChildById("avancement");
    	var tmp2 = obj.a_getText();
    	tmp2 = tmp2 + "/" + "appelA";
    	obj.a_setText(tmp2);
     
    	t_timerA = window.setInterval(function(){methodeCycliqueA()}, interval);
    }
     
    function methodeCycliqueA() {
    	timerA = timerA + 1;
     
    	// POUR LES TESTS
    	var obj = mainView.a_searchChildById("avancement");
    	var tmp2 = obj.a_getText();
    	tmp2 = tmp2 + "/A" + timerA;
    	obj.a_setText(tmp2);
     
    	// Cas d'une réponse ok
    	if (timerA == 5) {
    		clearInterval(t_timerA);
    	}
    }
     
    function appelV(interval) {
    	// POUR LES TESTS
    	var obj = mainView.a_searchChildById("avancement");
    	var tmp2 = obj.a_getText();
    	tmp2 = tmp2 + "/" + "appelV";
    	obj.a_setText(tmp2);
     
    	t_timerV = window.setInterval(function(){methodeCycliqueB()}, interval);
     
    }
     
    function methodeCycliqueB() {
    	timerV = timerV + 1;
     
    	// POUR LES TESTS
    	var obj = mainView.a_searchChildById("avancement");
    	var tmp2 = obj.a_getText();
    	tmp2 = tmp2 + "/B" + timerV;
    	obj.a_setText(tmp2);
     
    	// Cas d'une réponse ok
    	if (timerV == 5) {
    		clearInterval(t_timerV);
    	}
    }
    Une fois l'exécution de ce code terminé le texte contenu dans mon composant est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /appelA/appelV/STOP/A1/B1/B2/A2/A3/B3/B4/A4/A5/B5
    Appraremment la fonction appelV commence à s'exécuter alors que la fonction appelA n'est pas terminé.

  2. #2
    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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    mets une variable globale genre var finished=false
    que tu modifies à la fin de l'execution du premier truc..

    puis tu la teste au debut du second ...


    je sais c'est pas terrible mais c'est la seule solution que j'ai trouvé en javascirpt pour faire de la synchro ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    faire l'appel de appelV dans appelA si le traitement est fini!!

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 13
    Points
    13
    Par défaut
    OK les 2 solutions fonctionnent, ce qui m'embête c'est que normalement je dois écrire des fonctions réutilisables càd que les fonctions ...A et les fonctions ...V doivent être indépendantes. Or les 2 solutions que vous proposez entraînent une dépendance entre ...A et ...V mais bon j'vais voir comment je peux m'arranger avec ça.

    Je débute en js et ce que je trouve pas très logique c'est que appelV commence à s'exécuter alors que l'on a pas eu le retour d'appelA. Je croyais que, quelque soit le langage, quand on appelle une fonction, l'exécution de la fonction suivante ne se faisait qu'une fois la précedente achevée.

  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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    heu non javascript est assez particulire à ce niveau là et fonctionne en bulle...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 13
    Points
    13
    Par défaut
    "fonctionne en bulle" : C'est à dire ?

  7. #7
    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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    ben il est capable de lancer une fonction et passer à la suivante sans avoir terminé la première ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 13
    Points
    13
    Par défaut
    D'accord mais en fonction de quoi js décide de passer à la suivante, du temps d'exécution, du code qu'il y a dans la fonction...
    Js Gardera-t-il toujours la même stratégie ou ça peut varier ?
    Genre j'ai mes 2 fonctions A et B successives. Si dans ma fonction A, je fais des traitements "simples" mais qui peuvent être plus ou moins longs, du style passage dans une boucle qui peut être des fois très courte (i de 0 à 10) et des fois très longue (i de 0 à 1000000000000), js gardera à chaque fois la même solution d'exécution ou ça peut varier ?

  9. #9
    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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    ça peut varier ...

    un setTimeout entre les fonctions ne resoud pas toujours le problème d'ou un sniffer de fin de focntion avec un setInterval sur un flag
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 13
    Points
    13
    Par défaut
    Au risque de paraitre lourd, ce que tu me dis me fait me poser une question. Je fais du xmlhttprequest pour mettre à jour des infos dans ma page.
    Je fais donc des trucs du style :
    traitementXmlhttprequest()
    appelMethodeMaJComposants()

    Et là tu me dis que JS peut "aléatoirement" commencer à exécuter appelMethodeMaJComposants avant la fin de traitementXmlhttprequest. Si c'est ça, c'est pourri au possible.

  11. #11
    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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    j'utilise xmlhttprequest également et suis obligé de faire des tests de flags pour vérifier la fin des chargements avant de lancer certaines fonctions en l'occurence un changement de display et un renvoi vers une ancre ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  12. #12
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    euh on peut aussi faire du synchrone avec xhr, ce qui evite des tests dans certains cas
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  13. #13
    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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    jamais réussi à le faire tourner en synchrone mon truc ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  14. #14
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    ah ben moi pour certains trucs le synchrone est bien pratique, surtout si le traitement coté serveur est pas long.
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 13
    Points
    13
    Par défaut
    c'est quoi le xhr, comment ça marche, est-ce que ça pourrait être utile dans mon cas ?

  16. #16
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    xhr = XmlHttpRequest
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/01/2016, 13h16
  2. Utilisation de la fonction setInterval
    Par Myrrdin dans le forum ActionScript 1 & ActionScript 2
    Réponses: 3
    Dernier message: 10/12/2009, 14h19
  3. Utilisation de la fonction de déploiement
    Par mchicoix dans le forum XMLRAD
    Réponses: 4
    Dernier message: 01/03/2005, 14h35
  4. Utilisation de la fonction qsort
    Par Jsmeline dans le forum C
    Réponses: 8
    Dernier message: 28/01/2005, 12h40
  5. [LG]librairies : utiliser seulement quelques fonctions
    Par wwwroom dans le forum Langage
    Réponses: 13
    Dernier message: 14/05/2004, 22h50

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