返回一个从NodeJS监听器派生的值
Returning a value derived from a NodeJS listener
我在一个函数内有一个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');
}
相关文章:
- nodejs-expressjs上传图像并显示它们
- TypeError:在不兼容的接收器nodejs上调用了方法Uint8Array.length
- Javascript全局onclick监听器
- NodeJS-readline暂停和恢复事件发射器(逐行读取)
- NodeJS日期格式不起作用
- 如何在td元素中添加监听器
- Nested Q.all nodejs
- Nodejs API控制器,用于在API之间切换
- 否'访问控制允许来源'标头存在于IISNOde中请求的资源(AngularJS+NodeJs)上
- 如何在大型nodeJS代码的基础上逐步引入typescript
- 在Nodejs中Express输入DEBUG=app时权限被拒绝/bin
- 无法使用nodeJS在html中设置Image src
- 与域在同一台计算机上运行的NODEJS服务器的CORS错误
- 监听器必须是一个函数
- NodeJS API调用中Array中的Push和Pull元素
- 基于api密钥的NodeJS web服务
- 在gump和nodejs中使用Typescript时,未定义对require和exports的引用
- “util.inherits”和在NodeJS中扩展原型之间的区别
- 返回一个从NodeJS监听器派生的值
- Nodejs变量不能传递给事件监听器