node.js - 确保一个事件发生在另一个事件之前

时间:2013-12-11 01:42:27

标签: node.js

我是node.js的新手并且正在学习......

我有以下2个socket.io监听器,我需要确保.on在.once之前发生(当前首先出现.once):

io.on('connection', function (socket) {

io.once('connection', function (socket) {

是否有一种很好的方法可以确保始终发生.once?

2 个答案:

答案 0 :(得分:3)

这可能不起作用,因为您正在创建两个独立的功能。通常,对于事件监听器来说,这很好。在这种情况下,你需要它们。

您可以做的是使用on订阅并让处理程序弄清楚它是否已经运行过。

io.on('connection', function (socket) {
  if (!this.called) {
    // do what you want to do only the first time

    this.called = true;
  }

  // do whatever you want to do every time
}.bind({ called: false });

这会创建一个包装函数,该函数会跟踪它是否已被调用,并在第一次调用时执行一些特殊操作。

答案 1 :(得分:2)

因此,当您拥有这些订单依赖项时,最好明确地为它们编码。当操作真正独立时,事件是很好的,但是当操作具有相互依赖性时,最好在代码中使其显而易见。通常,不要假设事件源将调用绑定事件处理函数的顺序。因此,尝试类似这样的伪代码:

io.on('connection', firstConnection);

function firstConnection(socket) {
    //do first connectiony stuff here
    io.on('connection', allConnections);
    io.off('connection', firstConnection);
    allConnections(socket);
}

function allConnections(socket){ /*all connectiony stuff here */}