2014-09-30 32 views
7

有什麼方法可以在事件循環中將優先級應用於Node.js任務。 我想爲nodejs的事件循環中存在的任務分配優先級。
假設在事件循環中有5個作業A,B,C,D,E,它們具有相同的優先級,然後接收其優先級高於後五個作業的下一個作業。然後事件循環開始執行該更高優先級的作業。爲事件循環中的nodejs任務分配優先級

+0

一個代碼示例會有所幫助。 – tikider 2014-09-30 08:46:18

+0

添加示例請檢查它。 – Sanket 2014-09-30 11:14:57

+0

你爲什麼需要這樣做? – neelsg 2014-09-30 11:33:21

回答

2

您應該使用優先級隊列,像priorityqueuejs

通過這種方式,你可以出隊與最高優先級的項目,並執行它。

一些代碼:

'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); 
    } 
    } 
})(); 

,輸出是:

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

這裏是executeNext函數提取的下一個最優先項目,並執行它。