2017-08-26 1 views
0

J'expérimente avec ce que je crois est un cas d'utilisation de base de promise-queuetraitement promesse file d'attente de l'ordre

var Queue = require("promise-queue") 
let queue = new Queue(); 

//add first item to queue 
queue.add(() => { 
console.log('start 1'); 
return new Promise((resolve, reject) => { 
     setTimeout(() => { 
      console.log('finished processing'); 
      resolve(); 
     }, 
     5000); 
    }); 
}); 

//add second item to queue 
queue.add(() => { console.log('start 2'); }); 

résultats dans la sortie:

>start 1 
>start 2 
>finished processing 

Le deuxième élément commence avant la première l'article est terminé. Qu'est-ce que je rate?

Essayez cet exemple de code runkit

+0

Vous remarquez les effets de la file d'attente et callstack qui font JavaScript très spécial. Votre code exécute le fichier entier en environ 20ms. L'interpréteur JS touche la ligne 5 et les logs 1, puis charge la promesse dans la file d'attente, puis exécute le 'start 2' immédiatement après, puis après 5 secondes, la promesse est résolue. – agm1984

+0

Je regarde votre code maintenant, mais je ne sais pas comment fonctionne la file d'attente de promesses pour bien raisonner sur ce que vous devriez faire. – agm1984

+2

Essayez peut-être d'ajouter ceci au début de votre code car il pourrait permettre aux deux de s'exécuter en même temps: 'const maxConcurrent = 1; const maxQueue = 1; const queue = new Queue (maxConcurrent, maxQueue); ' – agm1984

Répondre

1

si vous changez

let queue = new Queue(); 

à utiliser le paramètre concurrency

let queue = new Queue(1); 

alors votre code fonctionne comme prévu

Peut-être il y a une> 1 concurrence simultanée dans la file d'attente de promesses

regardant the source code, la valeur par défaut est Infinity Promesses simultanées

+0

pouvez-vous expliquer quel est le but d'avoir une «file d'attente» qui a une quantité infinie de promesses concurrentes? c'est-à-dire qu'est-ce qu'un usage réel d'une telle file d'attente? – wal

+0

Je ne sais pas pourquoi le défaut serait si contre-intuitif –

+0

bon je ne suis pas le seul – wal