2016-06-08 44 views
0

使用的readline模塊讀取我可以流線由行一個文件中的Node.js這樣的:如何異步線路之間添加間隔,而在Node.js的

var rd = readline.createInterface({ 
    input: fs.createReadStream('/path/to/file'), 
    output: process.stdout, 
    terminal: false 
}); 

rd.on('line', function(line) { 
    console.log(line); 
}); 

有沒有辦法來添加每次調用console.log()之間的時間間隔同時也會使整個過程異步?

含義,從程序的任何其他部分產生的任何日誌語句被從readline的

我的服務器監聽需要發佈傳入消息的聲明混在控制檯上公佈。當他們進入時,直到readline已經讀取整個文件後纔會發佈。

+0

什麼是你要完成它?也許有另一種方式來做到這一點。 –

+0

它的要點是我生產兩種消息。一個來自靜態日誌文件,另一個來自客戶端。對於文件,我只是使用readline來遍歷文件中的每一行。但是這個文件可能非常大,所以來自客戶端的任何傳入消息都需要在它們出現時發佈。當來自客戶端的消息進入時,我想暫停來自文件的readline,然後在發佈客戶端消息時從同一地點恢復。可以完成傳入消息的暫停,但您如何知道該消息已在控制檯上發佈? – Fizi

+0

對不起,如果我有更多的事情進一步:) – Fizi

回答

0

每封郵件只在1秒間隔處理

// debounce function - await fn call with timeout 
// credits: https://remysharp.com/2010/07/21/throttling-function-calls 
function debounce(fn, delay) { 
    var timer = null; 
    return function() { 
    var context = this, 
     args = arguments; 
    clearTimeout(timer); 
    timer = setTimeout(function() { 
     fn.apply(context, args); 
    }, delay); 
    }; 
} 
rd.on('line', debounce(function(line) { 
    console.log(line); 
}, 1000)); // <== call fn only within 1sec 

僞輸出:

1sec: 
    line: some text 
    log: some text 

2sec: 
    line: another text 
    log: another text 

2.5sec: 
    line: quick message text 

2.9sec: 
    line: dota 2 manila major 

3sec: 
    log: quick message text 
    log: dota 2 manila major 
+0

這只是停止了第一行後的讀取。 – Fizi