2014-09-30 3 views
7

Gibt es eine Möglichkeit, wie man die Node.js-Tasks in einer Ereignisschleife priorisieren kann. Ich möchte Aufgaben Priorität zuweisen, die in einer Ereignisschleife von nodejs vorhanden sind.
Angenommen, in einer Ereignisschleife gibt es 5 Jobs A, B, C, D, E, die dieselbe Priorität haben und dann den nächsten Job erhalten, dessen Priorität höher als die letzten fünf Jobs ist. Dann startet die Ereignisschleife den Job mit höherer Priorität.Priorität der Nodejs-Tasks in einer Ereignisschleife zuweisen

+0

Ein Codebeispiel würde helfen. – tikider

+0

Beispiel hinzugefügt, bitte überprüfen Sie es. – Sanket

+0

Warum sollten Sie das tun? – neelsg

Antwort

2

Sie sollen eine Prioritätswarteschlange verwenden, so etwas wie priorityqueuejs

Auf diese Weise können Sie ein Element mit der max Priorität aus der Warteschlange entfernt und ausführen.

Einige Code:

'use strict'; 

var PriorityQueue = require('priorityqueuejs'); 

var queue = new PriorityQueue(function(a, b) { 
    return a.value - b.value; 
}); 

queue.enq({ value: 10, func: function() { console.log("PRIORITY: 10"); } }); 
queue.enq({ value: 500, func: function() { console.log("PRIORITY: 500"); } }); 
queue.enq({ value: 300, func: function() { console.log("PRIORITY: 300"); } }); 
queue.enq({ value: 100, func: function() { console.log("PRIORITY: 100"); } }); 

(function executeNext() { 
    if(queue.size()) { 
    var next = queue.deq(); 
    next.func(); 
    if(queue.size()) { 
     setTimeout(executeNext, 0); 
    } 
    } 
})(); 

Und der Ausgang ist:

PRIORITY: 500 
PRIORITY: 300 
PRIORITY: 100 
PRIORITY: 10 

Hier ist die executeNext Funktion extrahiert die nächste Top-Priorität Element und führt sie aus.

Verwandte Themen