Node.js:如何将readStream作为函数参数传递并在回调中使用?

时间:2013-01-28 17:54:49

标签: node.js stream

我想将一个流作为参数传递给一个函数并在异步回调中使用它但它被销毁(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

为什么会发生这种情况? 我该怎么做才能在回调中使用它?

1 个答案:

答案 0 :(得分:2)

这是因为流在您尝试管道之前结束。首先,流是可读的,因为同步代码仍在工作。在第二个位置(回调内部)流已经结束,因为回调可能在将来几个滴答之后执行。如果你想在将来阅读它,你需要通过你的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);
    });
};