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

NodeJS Discussion :

Async et attente traitement du callback


Sujet :

NodeJS

  1. #1
    Membre du Club
    Profil pro
    Chef de projet Informatique
    Inscrit en
    Février 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef de projet Informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 49
    Points : 50
    Points
    50
    Par défaut Async et attente traitement du callback
    Bonjour,

    J'ai le code suivant dans un fichier userModel.js
    Je veux que ma fonction load rende la main quand les callback sont appelés.
    J'ai trouvé async qui me semblait résoudre ce problème mais ça ne fonctionne pas.

    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
     
    var async = require('async');
    var oio = require('orchestrate');
    // Orchestrate
    oio.ApiEndPoint = "";
    var db = oio("");
     
    function UserModel() {
     
     
    }
     
    UserModel.prototype.load = function(key) {
     
        async.series([
            function(callback) {
     
                db.get('Users', key)
                .then(function (res) {
                    console.log("a")
                    callback(null, res.body)
                })
                .fail(function (err) {
                    console.log("b")
                    callback(err.body, null )
                });
            },
     
        ], function (err, result) {
            console.log("err="+err);
            console.log("result"+result);
        });
    },
     
    module.exports = UserModel;
    Mon code qui utilise userModel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                var myUserModel = new UserModel(db);
                myUserModel.load("loudo");
                console.log("fin");

    ça ne fonctionne pas car la fonctionne load rend la main avant que le callback soit appelé, j'ai l'impression que async ne fonctionne pas dans mon cas mais je ne sais pas pourquoi.

    J'ai les messages dans l'ordre suivant :
    fin => correspond à la sortie de la fonction load
    a => appel du callback
    err => callback async
    result => callback async

    Je veux que ma fonction load rende la main quand le traitement est terminée car je veux enchaîner plusieurs fonctions qui sont dépendantes les une des autres.
    Merci pour votre aide.

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Points : 545
    Points
    545
    Par défaut
    Salut,

    Async ne permet pas de rendre ta fonction load asynchrone synchrone, mais de maitriser l’exécution de plusieurs fonctions asynchrone. Or dans ton cas ta fonction load utilise une seule action asynchrone, ta requete database, avec 2 fonctions callback exclusive dans un système dite de promises, bref ton async.series ne sert à rien car tu n’exécute qu’une seule action asynchrone.

    Le seule moyen de rendre une fonction asynchrone synchrone est de bidouiller avec les générateurs, mais cela nécessite un environnement JavaScript récent, supportant la norme ECMAScript 6 (cf le module suspend ). De plus tu ne pourras pas te passer de fonction callback donc le plus simple est ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    UserModel.prototype.load = function(key,callback) {
     
       db.get('Users', key)
       .then(callback)
       .fail(callback)
    },
     
    var myUserModel = new UserModel(db);
    myUserModel.load("loudo",dunction(err,result)
    {
    	console.log("err="+err);
        console.log("result"+result);
    	console.log("fin");
    });
    ShaderElement : Bénéficier de l’accélération graphique simplement par une nouvelle balise HTML <shader>
    ODE.js : portage JavaScript du célèbre moteur physique 3D Open Dynamics Engine

Discussions similaires

  1. Affichage fenêtre d'attente + traitements
    Par tnarol dans le forum Windows
    Réponses: 2
    Dernier message: 20/06/2009, 14h58
  2. page d'attente traitement externe formulaire
    Par rigobert dans le forum Webdesign & Ergonomie
    Réponses: 5
    Dernier message: 06/05/2008, 18h16
  3. [Système] page d'attente pendant traitement system
    Par Squyrrel dans le forum Langage
    Réponses: 1
    Dernier message: 24/03/2006, 22h09
  4. Réponses: 8
    Dernier message: 25/11/2005, 18h38
  5. [JProgressBar] Afficher barre d'attente pendant traitement
    Par Regis.C dans le forum Composants
    Réponses: 10
    Dernier message: 02/09/2005, 16h43

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