首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.JS through2回调

Node.JS through2回调
EN

Stack Overflow用户
提问于 2015-05-11 04:31:53
回答 2查看 3.4K关注 0票数 6

我对Node.JS很陌生,并试图理解through2库。

我想知道回调(在下面的示例代码中是从上面的链接复制的)是如何有用的。如果可能的话,请解释使用一小块代码。

代码语言:javascript
复制
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'))
EN

回答 2

Stack Overflow用户

发布于 2015-05-11 06:27:53

我相信这是需要继续的管道链。如果你不叫它的话,管子就会破裂。

这条语句来自through2文档

最小的实现应该调用回调函数来指示转换已经完成,即使这种转换意味着放弃块。

票数 6
EN

Stack Overflow用户

发布于 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库决定的,而是由您决定的。所以如果我是你,我会写成这样:

代码语言:javascript
复制
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'))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30159706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档