Node.js:如何传递一个readStream作为函数参数,并在callback中使用?

我想将一个stream作为parameter passing给一个函数,并在asynchronouscallback中使用它,但它被销毁(stream.readable为false)

例如:

var test = require('./test'); var file = fs.createReadStream('./file.txt'); test(file, console.log); 

并在test.js中:

 module.exports = function(stream, callback) { //stream.pipe(process.stdout); ///////// STREAM IS READABLE HERE doSomething('abc', function(err) { stream.pipe(process.stdout); ///////// STREAM IS NOT READABLE HERE callback(err); }); }; enter code here 

为什么会这样呢?
我能做些什么来callback?

Solutions Collecting From Web of "Node.js:如何传递一个readStream作为函数参数,并在callback中使用?"

发生这种情况是因为在尝试pipe道stream之前stream会结束。 首先,stream是可读的,因为你的同步代码仍在工作。 第二个(callback内)stream已经结束了,因为callback可能会在几个ticks之后被执行。 如果你想在将来阅读,你需要通过你的streem。 这个代码应该工作:

 var test = require('./test'); var file = fs.createReadStream('./file.txt'); file.pause(); test(file, console.log); 

test.js

 module.exports = function(stream, callback) { doSomething('abc', function(err) { stream.resume(); stream.pipe(process.stdout); callback(err); }); };