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 :

Exécution séquentielle de 3 fonctions JS


Sujet :

JavaScript

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Points : 187
    Points
    187
    Par défaut Exécution séquentielle de 3 fonctions JS
    Bonjour à tous je bute aujourd'hui sur le problème suivant,
    Depuis quelques temps je souhaite exécuter 3 fonctions de manière séquentielle. Le fonctionnement est impérativement séquentiel la fonction 1 fournit des résultats nécessaires à l'exécution de la fonction 2 qui fournit des résultats nécessaires à l'exécution de la fonction 3. Ces fonctions ne sont pas des objets jQuery sinon j'aurai réglé le problème.
    Ces fonctions sont des fonctions relativement lourdes écrites en JavaScript pur.
    Après moultes essais suite à des recherches intensives sur Internet je n'ai toujours pas de solution. Le déroulement est parfois correct parfois totalement aléatoire je ne comprends pas pourquoi!!!
    Existe-t-il une manière sure de réaliser cette séquence de 3 fonction JS ?
    D'avance merci pour vos conseils éclairés.
    Cdlt

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Tout dépend si ces fonctions sont synchrones ou asynchrones. Si elles sont synchrones, le problème est trivial:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var resultat1 = fonction1();
    var resultat2 = fonction2(resultat1);
    var resultat3 = fonction3(resultat2);
    Si elles sont asynchrones (requête AJAX, timeouts etc...), alors c'est un poil plus compliqué. jQuery, vu que tu sembles l'utiliser, fournit une API $.Deferred permettant de simplifier ce genre de traitements. En supposant que les 3 fonctions retournent un objet de type Deferred, alors cela se traduira par le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fonction1().then(fonction2).then(fonction3).done(function(resultat3){
    console.log("les 3 fonctions ont été exécutées les unes après les autres");
    });
    One Web to rule them all

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Points : 187
    Points
    187
    Par défaut
    Merci pour ta réponse, je dois admettre ne pas m'être dépêtré de cette notion de Deferred !
    C koi un objet de type "Deferred", comment vérifier si une fonction est synchrone ou asynchrone ?

    D'avance merci
    Cdlt

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 112
    Points
    44 112
    Par défaut
    Bonjour,
    Citation Envoyé par SylvainPV
    Si elles sont asynchrones (requête AJAX, timeouts etc...),

  5. #5
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Si la fonction te retourne directement le résultat à l'appel, par l'instruction return, c'est qu'elle est synchrone.
    Les Deferred sont une interface propre à jQuery pour gérer plus facilement les fonctions asynchrones, plusieurs autres classes de jQuery héritent de celle-ci (typiquement jqXHR pour les requêtes AJAX)
    One Web to rule them all

Discussions similaires

  1. Exécution séquentielle de fonctions en python
    Par cabaflo dans le forum Général Python
    Réponses: 1
    Dernier message: 03/07/2013, 20h15
  2. Réponses: 18
    Dernier message: 31/05/2008, 19h38
  3. Exécution macro avec une fonction intégré
    Par kiwi31 dans le forum VBA Access
    Réponses: 13
    Dernier message: 22/05/2007, 16h18
  4. [Requête]exécuter un calcul en fonction d'une quotité
    Par zougna dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 17/04/2007, 23h08
  5. Réponses: 10
    Dernier message: 25/11/2005, 17h12

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