Bad*_*bby 1 javascript stream node.js nodejs-stream
我正在实现一个由猫鼬光标进行管道传输的转换流(其工作方式类似于可读流,(或者可能是真正的可读流))
const myTransform = new Transform({
readableObjectMode: true,
writableObjectMode: true,
transform(chunk: Document, encoding, callback) {
this.push(chunk?.toObject() ?? null); // <- transforms data
callback(); // <- calls callback
},
});
MyMongooseModelWithHugeData.find()
.cursor()
.pipe(myTransform)
.pipe(someWriteStream)
Run Code Online (Sandbox Code Playgroud)
是的。我当前的代码工作正常。
但我发现callback内部transform实现,接收第二个参数(显然看起来像经典的nodejs异步回调风格)。
所以,我改变了我的代码,如下所示,发现它也工作得很好。
const myTransform = new Transform({
readableObjectMode: true,
writableObjectMode: true,
transform(chunk: Document, encoding, callback) {
callback(null, chunk?.toObject() ?? null); // <- transforms data and calls callback.
},
});
Run Code Online (Sandbox Code Playgroud)
我感到有些尴尬。我搜索了一些有关创建转换流的博客。我发现的所有文章都告诉我必须使用this.push()和调用callback()。但他们甚至没有提到 的第二个参数callback()。
所以,我的问题是:
this.push()传递转换值时和传递转换值时有区别吗callback()?this.push而不是callback?来自nodejs文档
任何给定的输入数据块都可能不会生成任何输出。
callback仅当当前块完全消耗时才必须调用该函数。如果在处理输入或其他情况时发生错误,则传递给 的第一个参数callback必须是一个对象。如果将第二个参数传递给,它将被转发到该
方法。Errornullcallbacktransform.push()
换句话说,以下内容是等效的:
transform.prototype._transform = function(data, encoding, callback) {
this.push(data);
callback();
};
transform.prototype._transform = function(data, encoding, callback) {
callback(null, data);
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1319 次 |
| 最近记录: |