gpt4 book ai didi

javascript - 返回从 NodeJS 监听器派生的值

转载 作者:行者123 更新时间:2023-11-30 18:39:37 24 4
gpt4 key购买 nike

我在一个函数中有一个 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');          return contentRead;                });}

我想做类似 var contents = myDerivedObj.read() 的操作来返回文件的内容。

但是,从监听器内部返回的返回值没有正确返回 - 变为“未定义”。而且,从监听器外部返回只会返回一个空字符串。

我无法更改 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 是对的,我错了。我刚刚对此进行了测试,尽管我认为回调会起作用,但整个 Node 进程都会锁定。这样做:

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

关于javascript - 返回从 NodeJS 监听器派生的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7251306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com