【问题标题】:Streaming the results of multiple fs.readfiles流式传输多个 fs.readfiles 的结果
【发布时间】:2015-02-15 10:37:01
【问题描述】:

我是 node js 流的新手,我想要实现的是在我拥有的模块中流式传输读取文件的结果。然后我想以某种方式在我的主应用程序中调用这个可读流并监听数据事件,所以每次 readfile 返回结果时都会触发一个数据事件,并且该对象作为一个块传递。这是我到目前为止所得到的,它正在抛出一个错误......

function streamObjects(type, dirname){
    var Readable = require('stream').Readable;
    var rs = new Readable({objectMode: true});
    fs.readdir(dirname, function(err, files){

        if(err)
            console.log(err);

        for(var i=0;i<10;i++)
        {           
            fs.readFile(path.resolve(dirname, files[i]),function(err,data){
                    if(err)
                        console.log(err);

                    rs.push(JSON.parse(data));
            }); //end readFile 
        } //end for loop
        return rs;
});
}

【问题讨论】:

    标签: node.js stream


    【解决方案1】:

    您想使用 EventEmitter。 您的 readFile 是一个异步函数,当您返回 rs Readable 时不会调用该函数。

    var util = require('util');
    var EventEmitter = require('events').EventEmitter;
    
    function streamObjects(type, dirname) {
        var Readable = require('stream').Readable;
        var rs = new Readable({objectMode: true});
        var self = this;
        fs.readdir(dirname, function (err, files) {
    
        if (err)
            console.log(err);
    
        for (var i = 0; i < 10; i++) {
            fs.readFile(path.resolve(dirname, files[i]), function (err, data) {
                if (err)
                    console.log(err);
                self.emit('data', files[i], data);
                rs.push(JSON.parse(data));
            }); //end readFile
        } //end for loop
    
    
      });
    }
    
    util.inherits(streamObjects, EventEmitter);
    
    
    module.exports = streamObjects;
    

    来自另一个文件

    var streamObjects = require('streamObjects');
    
    var streamObjectInstance = new streamObjects(type, dirName);
    streamObjectInstance.on('data', yourFunctionHere);
    

    我没有放入错误发射,但您可以在发生错误时添加。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 2020-07-17
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多