27

我是 node.js 和 java 脚本的新手,我找不到这个“.on”关键字的含义。当我用另一个字代码更改它时失败了。

var req = http.get("http://www.google.com", function(res) {
  console.log("Got response: " + res.statusCode);

 res.on('data', function (chunk) {
});

}).on('error', function(e) {
console.log("Got error: " + e.message);
 });
4

3 回答 3

36

on方法将事件绑定到对象。

如果发生某些事情(数据发送或错误),这是一种表达您的意图的方式,然后执行作为参数添加的函数。这种编程风格称为事件驱动编程您可能想在维基百科中查找它

在 node.js 中,有一个名为EventEmitter的类,如果您决定在自己的代码中使用它们,它会为您提供基本事件所需的所有代码(我强烈建议在 node.js 的情况下使用它们)。node.js EventEmitter的文档在这里

于 2012-10-15T16:49:27.070 回答
11

.on是一种用于绑定事件处理程序的方法。

于 2012-10-15T09:30:56.487 回答
8

http.get的回调使用单个参数(您已命名req)调用。req是“请求”的缩写,是一个通用名称,因为此参数是一个http.ClientRequest对象。http.ClientRequest 对象实现了 stream.Writable,这是重要的一点:所有流都是EventEmitter的实例。

EventEmitter 有一个名为on的函数,它为指定的事件添加一个监听函数。

“监听函数”只是“回调函数”的别称

在您的示例中,您为data事件和error事件添加了一个侦听器。监听器函数由 EventEmitter调用(因此称为“回调”)。

额外学分

如果您需要一个侦听器来停止侦听(即,您不再希望调用您的回调),您可以使用emitter.removeListener函数删除一个侦听器:

var myCallback = function(e) { console.log('Got error: ' + e.message); }
res.on('error', myCallback);
// do some things...
res.removeListener('error', myCallback);

如果你只想让一个监听器运行一次,你可以使用emitter.once代替on函数,然后你就不必删除它:

res.once('error', myCallback);
于 2017-08-17T17:28:46.600 回答