我有这样的代码,它为请求对象分配一个监听器,当数据到来时,函数就会执行。我的问题是,"chunk"变量是如何在函数调用中获得其值的?这是对请求对象的某种隐含赋值吗?我在JS中看到过类似的模式,但并不真正理解它们是如何工作的。任何澄清都会有所帮助。
request.on("data",function(chunk){
response.write(chunk.toString().toUpperCase()) ;
})
emits
请求对象上的"data"
事件(请求对象内部)将chunk参数传递给事件处理程序的代码。由于请求对象继承自eventEmitter
,因此请求对象内部想要通知某些数据可用性的代码如下所示:
request.emit("data", chunk);
然后,将使用chunk
作为参数来调用为"data"
事件注册的事件处理程序。
这与Javascript中的任何事件处理程序相同。触发事件的代码为事件处理程序设置参数。您必须声明一个事件处理程序函数,该函数的参数与您在这里所做的传递给它的参数相匹配。
这就是回调函数在Javascript中的工作方式。调用回调的系统确定将发送回调的参数。然后,您声明您的回调与之匹配,并向将要调用它的系统注册该回调(将来某个时候)。在这种情况下,因为它是EventEmitter
,所以您可以将它注册到.on()
。在其他情况下,您可能会以其他方式注册它(例如使用promise,您将使用.then()
或.catch()
)。