3

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

为什么会这样?
我该怎么做才能在回调中使用它?

4

1 回答 1

3

发生这种情况是因为流在您尝试通过管道传输之前就结束了。首先,流是可读的,因为您的同步代码仍在工作。其次(回调内部)流已经结束,因为回调可能会在未来几个滴答后执行。如果您想在将来阅读它,您需要暂停您的流。此代码应该可以工作:

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

测试.js

module.exports = function(stream, callback) {
    doSomething('abc', function(err) {
         stream.resume();
         stream.pipe(process.stdout);
         callback(err);
    });
};
于 2013-01-28T18:15:37.957 回答