节点js转换中的push()和回调有什么区别
what's differnce between push() and callback in nodejs Transform
我正在实现一个 Transform stream,它由 mongoose 游标传输(它像可读流一样工作,(或者它可能是真正的可读流))
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)
是的。我当前的代码工作正常。
但我发现 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.
},
});
我觉得有些尴尬。我搜索了一些关于创建转换流的博客。我发现的所有文章都告诉我必须使用 this.push()
并调用 callback()
。
但是 none 他们甚至提到了 callback()
.
的第二个参数
那么,我的问题是:
this.push()
和callback()
传递转换后的值有区别吗?
- 为什么很多人建议使用
this.push
而不是 callback
?
来自 nodejs 文档
任何给定的输入数据块都可能没有生成任何输出。
callback
函数必须在当前块完全完成时调用
消费。传递给 callback
的第一个参数必须是 Error
对象
如果在处理输入时发生错误,否则 null
。如果一秒钟
参数传递给 callback
,它将被转发到
transform.push()
方法。
换句话说,以下是等价的:
transform.prototype._transform = function(data, encoding, callback) {
this.push(data);
callback();
};
transform.prototype._transform = function(data, encoding, callback) {
callback(null, data);
};
我正在实现一个 Transform stream,它由 mongoose 游标传输(它像可读流一样工作,(或者它可能是真正的可读流))
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)
是的。我当前的代码工作正常。
但我发现 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.
},
});
我觉得有些尴尬。我搜索了一些关于创建转换流的博客。我发现的所有文章都告诉我必须使用 this.push()
并调用 callback()
。
但是 none 他们甚至提到了 callback()
.
那么,我的问题是:
this.push()
和callback()
传递转换后的值有区别吗?- 为什么很多人建议使用
this.push
而不是callback
?
来自 nodejs 文档
任何给定的输入数据块都可能没有生成任何输出。
callback
函数必须在当前块完全完成时调用
消费。传递给 callback
的第一个参数必须是 Error
对象
如果在处理输入时发生错误,否则 null
。如果一秒钟
参数传递给 callback
,它将被转发到
transform.push()
方法。
换句话说,以下是等价的:
transform.prototype._transform = function(data, encoding, callback) {
this.push(data);
callback();
};
transform.prototype._transform = function(data, encoding, callback) {
callback(null, data);
};