我对Node.JS很陌生,并试图理解through2库。
我想知道回调(在下面的示例代码中是从上面的链接复制的)是如何有用的。如果可能的话,请解释使用一小块代码。
fs.createReadStream('ex.txt')
.pipe(through2(function (chunk, enc, callback) {
for (var i = 0; i < chunk.length; i++)
if (chunk[i] == 97)
chunk[i] = 122 // swap 'a' for 'z'
this.push(chunk)
callback()
}))
.pipe(fs.createWriteStream('out.txt'))发布于 2015-05-11 06:27:53
发布于 2015-05-11 06:36:24
如果您从提供的链接中阅读through2文档,您可能已经看到以下内容:
API接口 through2(选项,,flushFunction ) 请参阅stream.Transform文档,了解transformFunction (即this._transform)和可选flushFunction (即this._flush)的确切规则。
然后,如果单击stream.Transform链接并阅读那里的文档,您迟早会得到以下内容:回调
上面写着:
Transform._transform(块、编码、回调)#)
chunk缓冲区#字符串要转换的块。将始终是缓冲区,除非decodeStrings选项设置为false。encoding字符串如果块是字符串,则这是编码类型。(如果decodeStrings块是缓冲区,则忽略它。)callback函数在处理所提供的块时(可选地使用错误参数和数据)调用此函数。因此,基本上,这是一个函数,您应该调用它,向您正在处理的流发出信号。您不能简单地从函数返回以表示您已完成处理,原因是您可能有一些异步任务(查询数据库、通过网络发送数据包等)。这将导致函数在完成任务之前返回。
就我个人而言,我认为callback是一个不好的名字。一个更好的名字应该是类似摩卡的done()或承诺的resolve()。幸运的是,参数的名称不是由node.js或through2库决定的,而是由您决定的。所以如果我是你,我会写成这样:
fs.createReadStream('ex.txt')
.pipe(through2(function (chunk, enc, done) {
for (var i = 0; i < chunk.length; i++)
if (chunk[i] == 97)
chunk[i] = 122; // swap 'a' for 'z'
this.push(chunk);
done();
}))
.pipe(fs.createWriteStream('out.txt'))https://stackoverflow.com/questions/30159706
复制相似问题