node-mysql文档中的奇怪用法

时间:2015-08-27 00:13:13

标签: javascript node.js bind chain

在阅读node-mysql文档时,我看到了粘贴在下面的用法

var query = connection.query('SELECT * FROM posts');
query
  .on('error', function(err) {
    // Handle error, an 'end' event will be emitted after this as well
  })
  .on('fields', function(fields) {
    // the field packets for the rows to follow
  })
  .on('result', function(row) {
    // Pausing the connnection is useful if your processing involves I/O
    connection.pause();

    processRow(row, function() {
      connection.resume();
    });
  })
  .on('end', function() {
    // all rows have been received
  });

我想知道他们如何使用这些可以与名称一起使用的事件 用户将查询query命名为示例,当我创建自定义事件时,我首先将其命名为var foo=new events.EventEmitter,然后在整个页面中将其用作foo.on("someEvent") 但是在这里,他们以某种方式将用户创建的var绑定为示例代码中的事件名称用户将mysql查询命名为query,并且事件发射器具有相同的名称

和第二个问题如何使用

链接事件
.on("event").on("anotherEvent")

这个问题可能听起来很奇怪,但我真的很想知道它是如何工作的,它会完全改变我的代码设计

1 个答案:

答案 0 :(得分:1)

query只是node-mysql lib中Query实例的变量名。您可以访问对象导出的所有函数。

on继承自node.js核心中的EventEmitter。关键是调用on返回"本身"即this

  

返回发射器,因此可以链接调用。

这允许您将呼叫链接到on