【问题标题】:nodejs event stream setting a variable per streamnodejs事件流为每个流设置一个变量
【发布时间】:2015-01-22 09:25:37
【问题描述】:

我有一个创建可读流的代码。我想在 getStream 方法中设置流的名称。我尝试设置一个属性,如下所示。我可以访问 onceFunction 中的属性,但无法访问 map Function 中的属性。让我知道我做错了什么

var onceFunction = function(str1,record) {
    console.log("OnceFunction",this.nodeName);
}
var getStream = function(csvData) {
    var dirNames = csvData.split("/");
    var nodeName = dirNames[dirNames.length-2];
    var fileName = csvData;
    stream = fs.createReadStream(csvData);
    stream.nodeName = dirNames[dirNames.length-2];

    return stream;
};
var myFileList = ["D:\mypath\file"];

for ( var i = 0; i< myFileList.length; i++ ) {
    getStream(myFileList[i])
        .once('data',onceFunction)
        .pipe(es.split())
        .on('end',endFunction)
        .pipe(es.map(function(data,cb) {
            console.log(this.nodeName);

        }));
}

【问题讨论】:

  • 谢谢。作品。这是正确的做法吗?

标签: node.js asynchronous stream event-stream


【解决方案1】:

因为“es”有它自己的“this”。并将其传递给 es.map 回调。其中,当然,nodeName 是空的。重构您的代码以使用闭包并避免使用“this”。 例如在伪代码中:

for ( var i = 0; i< myFileList.length; i++ ) {
    processFile(myFileList[i]);
}

var processfile = function(file) {
    var stream = getStream(file);
    var somevar = stream.nodeName;
    stream.once('data',onceFunction)
        .pipe(es.split())
        .on('end',endFunction)
        .pipe(es.map(function(data,cb) {
            console.log(somevar);
            console.log(stream.nodeName);
        }));
}

【讨论】:

    猜你喜欢
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多