node.js - 为什么转换流在第一次写入后停止写入?
问题描述
在下面的示例中,它将“foo”写入 process.stdout 一次。为什么它不写“foo”10 次?
const { Transform } = require('stream');
class Stream extends Transform {
constructor(){
super({autoDestroy : false, emitClose :false});
}
_transform(chunk, encoding, callback){
this.push(chunk);
}
}
let stream = new Stream();
stream.pipe(process.stdout, {end:false});
for (let i = 0; i < 10; i++) {
stream.write('foo');
}
解决方案
它不打印“foo” 10 次的原因是因为我没有仔细阅读文档:
只有当当前块完全消耗时,才必须调用回调函数。如果在处理输入时发生错误,则传递给回调的第一个参数必须是 Error 对象,否则为 null。如果将第二个参数传递给回调,它将被转发到 readable.push()...
_transform(chunk, encoding, callback){
this.push(chunk);
callback();
}
修复它。
推荐阅读
- for-comprehension - 以下代码片段的理解等价物是什么?
- node.js - 如何使用 heroku 发布 API 项目?
- python - Flask 应用程序似乎无法在 Heroku 找到相关父包
- javascript - React Native - Firebase onSnaphot + FlatList 分页
- react-native - 如何在反应原生 webview 或 exoplayer 中播放 Widevine drm 内容?
- android - 播放控制台 - 使用不同版本的 apk 上传失败,已经有一个版本 1 - 但我有版本 2
- python - 如何在电报机器人中运行时停止工作
- c++ - 重载 C 预处理器宏 - 基于调用语法的区分
- swift - onAppear 中的 SwiftUI 异步数据获取
- algorithm - 如何以编程方式获得公式的派生形式?