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.queue avec les promesses


Sujet :

NodeJS

  1. #1
    Membre habitué Avatar de ac/dc
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 369
    Points : 197
    Points
    197
    Par défaut async.queue avec les promesses
    Bonjour,

    J'utilise async.queue pour réceptionner des valeurs, qu'il faut traiter dans l'ordre de réception.

    J'ai donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    queue = async.queue(traiterDonnees, 1);
    queue.push(donnee, function (err) {});
     
    function traiterDonnees (data, callback) {
    ...
    callback();
    }
    Est-ce qu'il est possible d'utiliser ce mécanisme avec des promises ?

    Merci
    Let there be light, sound, drums, guitar ... Let there be rock !

  2. #2
    Membre expérimenté
    Avatar de Gnuum
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 215
    Points : 1 715
    Points
    1 715
    Billets dans le blog
    1
    Par défaut
    Désolé de répondre un peu tard.
    Je ne sais pas si c'est ce que tu veux exactement, mais tu peux faire comme ça a priori:

    Code JavaScript : 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
    var queueProcessing = new Promise(function(resolve, reject) {
      var queue = async.queue(traiterDonnees, 1);
     
      queue.drain = function() {
        resolve();
      };
     
      queue.push(donnee, function (err) {
        reject(err);
      });
      // ... 
     
      function traiterDonnees (data, callback) {
        // ...
        callback();
      }
    }).then(function() {
      // ...
    });
     
    return queueProcessing;

    Ce code suppose que tous tes push se font de manière synchrone et que tous tes processus sont asynchrones. De plus, il suppose également qu'une fois que ta queue est traitée une première fois, tu n'en a plus besoin.
    Cependant, si c'est le cas, tu n'as certainement pas utilisé le bon composant async car le but de la queue est d'attendre des messages et de les processer. Si il n'y a pas de message, la queue attend, sinon elle les traite et s'il y en a trop, elle les stocke en attendant de pouvoir les traiter. Elle n'a pas forcément de fin.
    Pense à utiliser un eachOfLimit en priorité si tu en attends un comportement avec un début et une fin clairement identifiés.

    Autre possibilité, si une des données traitée doit mettre fin à la queue:

    Code JavaScript : 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
    var queueProcessing = new Promise(function(resolve, reject) {
      var queue = async.queue(traiterDonnees, 1);
     
      queue.push(donnee, function (err) {
        reject(err);
      });
      // ... 
     
      function traiterDonnees (data, callback) {
        // ...
        if (data === conditionDeSortie) {
          resolve();
        }
        // ...
        callback();
      }
    }).then(function() {
      // ...
    });
     
    return queueProcessing;
    {gnu: ["um", "cki"]}

  3. #3
    Membre habitué Avatar de ac/dc
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 369
    Points : 197
    Points
    197
    Par défaut
    OK merci de ta réponse.
    A priori tout n'est pas 'Promise' compatible
    Let there be light, sound, drums, guitar ... Let there be rock !

  4. #4
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Ici il y a une fonction promisify basée sur la bibliothèque Q qui semble capable d’adapter n’importe quelle fonction asynchrone de Node. Ça peut peut-être t’intéresser.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  5. #5
    Membre expérimenté
    Avatar de Gnuum
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 215
    Points : 1 715
    Points
    1 715
    Billets dans le blog
    1
    Par défaut
    OK merci de ta réponse.
    A priori tout n'est pas 'Promise' compatible
    Je ne pense pas que ce soit une question de compatibilité. Les promesses servent à chaîner un flux asynchrone en le gardant plat (contrairement aux callbacks qui s'imbriquent les unes dans les autres).
    En l'occurrence, il est tout à fait possible que ce que tu souhaites faire ne corresponde pas à cette utilisation.
    Si tu me précises vraiment plus en détail ce que tu attends de ce code, je pourrais mieux te conseiller.
    {gnu: ["um", "cki"]}

Discussions similaires

  1. [AJAX] Les promesses avec $.when().done()
    Par herotic dans le forum jQuery
    Réponses: 4
    Dernier message: 19/07/2013, 09h58
  2. programmer avec les queues IPC, suffisant?
    Par 1337cclean dans le forum Threads & Processus
    Réponses: 1
    Dernier message: 28/09/2010, 18h05
  3. IBM-MQ problème avec les Queue
    Par jdavid dans le forum Websphere
    Réponses: 1
    Dernier message: 10/09/2008, 16h01
  4. Gérer les queue avec sql server ?
    Par devdev dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 17/06/2004, 17h38
  5. Pbm avec les '&'...
    Par AmaX dans le forum Composants VCL
    Réponses: 2
    Dernier message: 19/08/2002, 11h08

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