返回从NodeJS监听器派生的值

我有一个函数内的NodeJS readstream监听器,我试图让我的函数返回一个从监听器中派生的值(文件的内容)。

例如:

 MyObj.prototype.read = function(){  

     var file3 = fs.createReadStream('test.txt',{encoding:'utf8'});            
     var contentRead ='';       

     file3.addListener('data',function(data){   
       contentRead + = data.toString('utf-8');    
      返回contentRead;            
     });
 }

我想要做一些像var contents = myDerivedObj.read()来返回文件的内容。

但是,从监听器内部的返回没有得到正确的返回 – 得到“未定义”。 而且,从监听器外部返回只是返回一个空string。

我不能改变read()的签名,所以我不能添加一个callback作为参数。

一般来说,这是一个糟糕的模式:当你做这样的事情时,NodeJS真的真的不喜欢它,因为你阻塞了主线程。 你会发现你的performance真的很糟糕。 所以不要这样做。 但是,如果你必须那么你可以试试这个:

MyObj.prototype.read = function(){ var file3 = fs.createReadStream('test.txt', {encoding: 'utf8'}); var contentRead = ''; var done = false; file3.addListener('data', function(data) { contentRead += data.toString('utf-8'); }); file3.addListener("end", function () { done = true; }); while(!done); return contentRead; } 

编辑:@Brandon是对的,我错了。 我只是testing了这一点,虽然我认为callback将工作,整个节点进程locking。 做这个:

 MyObj.prototype.read = function(){ return fs.readFileSync('test.txt', 'utf-8'); }