2014-09-30 37 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函数提取的下一个最优先项目,并执行它。