不使用参数和this.push的回调

Callback using no parameters and this.push

本文关键字:push 回调 this 参数      更新时间:2023-09-26

我一直在nodeschool学习。在Io的教程中,他遇到了一个涉及流的特定问题。这是给定的解。

我主要对上面的变量和为什么我需要调用this.push感到困惑。我不能通过回调函数(next())传递数据变量吗?

如果能一行一行地解释一下这里发生了什么,我将不胜感激。

var http = require('http');
var fs = require('fs');
var through2 = require('through2');
var upper = through2(function(data, _, next) {
   data = data.toString().toUpperCase();
   this.push(data);
   next();
});
http.createServer(function(req,res) {
   if (req.method == 'POST') {
      req.pipe(upper).pipe(res);
   }
}).listen(process.argv[2]);

这就是through2函数的API的工作原理。从文档

transformFunction必须有如下签名:function (chunk, encoding, callback){}。最小的实现应该调用回调函数来指示转换完成,即使该转换意味着丢弃块。

为一个新的数据块排队,调用this.push(chunk)——如果你有多个数据块要发送,在callback()之前,这个函数可以被调用多次。

很明显,这个的原因。Push是为了方便处理需要推送大量数据块的情况。

for(var i=1; i<=10; i++){
     this.push( /**/ )
}

也就是说,根据文档,您还可以像您希望的那样将块传递给回调:

或者,您可以使用callback(err, chunk)作为发出单个块或错误的简写。

我无法测试,但我猜你想要类似于

的东西
var upper = through2(function(data, _, next) {
   data = data.toString().toUpperCase();
   next(null, data);
});