Node.js nodejs事件流设置每个流的变量
我有一个创建可读流的代码。我想在getStream方法中设置流的名称。我尝试设置一个属性,如下所示。我可以访问onceFunction中的属性,但无法访问map函数中的属性。让我知道我做错了什么Node.js nodejs事件流设置每个流的变量,node.js,asynchronous,stream,event-stream,Node.js,Asynchronous,Stream,Event Stream,我有一个创建可读流的代码。我想在getStream方法中设置流的名称。我尝试设置一个属性,如下所示。我可以访问onceFunction中的属性,但无法访问map函数中的属性。让我知道我做错了什么 var onceFunction = function(str1,record) { console.log("OnceFunction",this.nodeName); } var getStream = function(csvData) { var dirNames = csvDa
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);
}));
}
var onceFunction=function(str1,记录){
log(“OnceFunction”,this.nodeName);
}
var getStream=函数(csvData){
var dirNames=csvData.split(“/”);
var nodeName=dirNames[dirNames.length-2];
var fileName=csvData;
stream=fs.createReadStream(csvData);
stream.nodeName=dirNames[dirNames.length-2];
回流;
};
var myFileList=[“D:\mypath\file”];
对于(var i=0;i
因为“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);
}));
}
for(var i=0;i
谢谢。作品这是正确的做法吗?