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 :

Résultat d'une fonction récursive asynchrone


Sujet :

JavaScript

  1. #1
    Membre éclairé

    Inscrit en
    décembre 2009
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : décembre 2009
    Messages : 146
    Points : 881
    Points
    881
    Par défaut Résultat d'une fonction récursive asynchrone
    Bonjour,

    Je cherche à faire un bon vieux parcours de répertoires avec des actions dans chaque répertoire (avec NodeJs avec le module fs mais le problème me semble être généraliste).

    La fonction de base est très simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function parcours(path)
    {
      for ( Liste des fichiers )
      {
        if ( un répertoire ?)
          parcours(path/répertoire)
        else
          faire des choses.
      }
    }
    Le mon problème est que j'aimerai avec un appel vers une fonction à la fin du traitement.

    J'ai essayé des compteurs, j'ai vu des choses avec Promise, mais je n'ai pas réussi à m'en sortir;

    Quelqu'un a-t-il une idée ?

  2. #2
    Rédacteur/Modérateur

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

    Informations forums :
    Inscription : novembre 2012
    Messages : 3 298
    Points : 9 685
    Points
    9 685
    Par défaut
    Bonjour homonyme vinologue,

    Citation Envoyé par Sylvaner Voir le message
    Le mon problème est que j'aimerai avec un appel vers une fonction à la fin du traitement.
    Il manque des mots non ?

    Si j'ai bien compris ce que tu veux, un compteur, un callback et une closure devraient suffire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function parcours(path, callback){  
      var nbFichiers = listeFichiers.length,
          n=0;
     
      for ( liste des fichiers )
      {
        if ( un répertoire ?){
          parcours(pathRepertoire, function(){ n++; if(n === nbFichiers) callback(); });
        } else {
          //faire des choses.
          n++; if(n === nbFichiers) callback();
        }
      }
    }
    One Web to rule them all

  3. #3
    Membre averti
    Profil pro
    à la bougie alors
    Inscrit en
    mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : mai 2006
    Messages : 224
    Points : 362
    Points
    362
    Par défaut
    Boire ou coder il faut choisir ...

    Si le parcours en profondeur d'abord n'est pas une contrainte ni l'ordre des répertoires, et en utilisant l'idée de Sylvain pour le callback
    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
    function parcours ( path, callback /*, thisArg */ ) {
        // ctrl arg path
        if ( typeof callback != "function" )
            throw new TypeError("parcours : 'callback' is not a function");
        var thisArg = arguments.length > 2 ? arguments[2] : undefined;
     
        var stack = [path], sp = stack.length;
        // avant tout traitement
        callback.call(thisArg, ...);
        while ( sp ) {
            path = stack[--sp];
            // avant traitement du répertoire
            callback.call(thisArg, ...);
            for( liste des fichiers ) {
                if ( répertoire )
                    stack[sp++] = path/répertoire;
                else
                    faire des choses
            }
            // après traitement du répertoire
            callback.call(thisArg, ...);
        }
        // après traitement complet
        callback.call(thisArg, ...);
    }

  4. #4
    Membre éclairé

    Inscrit en
    décembre 2009
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : décembre 2009
    Messages : 146
    Points : 881
    Points
    881
    Par défaut
    Hum j'avais essayé sans succès, peut être m'y étais mal pris, je vais tester vos solutions.

    Merci beaucoup

Discussions similaires

  1. Additionner résultats d'une fonction récursive
    Par Invité dans le forum Langage
    Réponses: 9
    Dernier message: 07/02/2012, 17h30
  2. Récupérer le résultat d'une fonction récursive
    Par baggie dans le forum Langage
    Réponses: 2
    Dernier message: 04/02/2011, 10h06
  3. Affecter résultat d'une fonction à une variable ?
    Par ctobini dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 07/09/2006, 14h45
  4. Récupérer le résultat d'une fonction dans une balise html
    Par Hayato dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/06/2006, 17h04
  5. Réponses: 6
    Dernier message: 08/06/2006, 10h07

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