非阻塞文件在nodejs中使用wait.for进行暂停读取

我有以下问题。 我想阅读一个文件之间的行读取非阻塞暂停。 我用wait.for和懒得分别等待和读取文件。

当我呼吁等待,我得到错误:wait.for只能在光纤内调用任何人都可以告诉我如何访问线对象。 我试图做一个单独的function,但是然后我失去行variables持有该行。

var lazy = require("lazy"), fs = require("fs"); wait = require('wait.for'); wait.helper={}; wait.helper.timeout_callback = function(ms,callback){ setTimeout(callback,ms); //call callback(null,null) in ms miliseconds } wait.miliseconds = function(ms){ wait.for(wait.helper.timeout_callback,ms); } function test(){ new lazy(fs.createReadStream('./test.txt')) .lines .forEach( function(line){ //wait.miliseconds(1*1000); // this causes Error: wait.for can only be called inside a fiber console.log(line.toString()); } ); } wait.launchFiber(test); 

如果您不介意非光纤解决scheme,则使用callback函数:

 var fs = require('fs'); var stream = fs.createReadStream('file.txt'); stream.on('data', onData).buffer = ''; function onData(chunk) { var i, hasData = Buffer.isBuffer(chunk); if (hasData) { stream.buffer += chunk.toString('utf8'); if (stream.paused) return; } if ((i = stream.buffer.indexOf('\n')) > -1) { var line = stream.buffer.substring(0, i); stream.buffer = stream.buffer.substring(i + 1); stream.pause(); stream.paused = true; onLine(line, onData); } else if (!hasData) { stream.resume(); stream.paused = false; } } function onLine(line, cb) { setTimeout(function() { // do something with line console.log(line); cb(); }, 1000); }