返回一个从NodeJS监听器派生的值

Returning a value derived from a NodeJS listener

本文关键字:监听器 NodeJS 派生 一个 返回      更新时间:2023-09-26

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

。:

<>之前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()返回文件的内容。

然而,从监听器内部返回的结果没有得到正确的返回——得到'undefined'。并且,从侦听器外部返回只是返回一个空字符串。

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

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

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是对的,我错了。我刚刚对此进行了测试,尽管我认为回调可以工作,但整个节点进程都锁定了。这样做:
MyObj.prototype.read = function(){      
        return fs.readFileSync('test.txt', 'utf-8');
    }