邮件后JS数据变得不确定。 (node,socket.io,express)

时间:2013-12-20 21:47:16

标签: javascript node.js sockets

我刚刚开始编码,所以我的术语可能有些偏差,但是这里有。

所以我的app.js文件中有一个对象var users = {};。在我的客户端代码中,我有一个函数从输入字段获取$ nickBoxVal()并将其作为(数据)传递到客户端和服务器端作为(数据)。

所以我在客户端有类似的东西:

$nickForm.submit(function(e) {
  e.preventDefault;
    socket.emit('new user', $nickBox.val(), function(data) {
      //stuff
    });
      $nickBox.val('');
});

并在服务器上:

socket.on('new user', function(data, callback) {
  if (data in users) {
    callback(false);
  } else {
    callback(true);
    socket.nickname = data;
    users[socket.nickname] = socket;
    updateNicknames();
  }
});

function updateNicknames() {
  io.sockets.emit('usernames', Object.keys(users)); 
}

现在,当我转到下一页时,(数据)变得不确定。我做了很多研究,似乎我的代码在需要同步时是异步的。我找到的所有指南都告诉我在函数外部声明未定义的var,这样它就是一个全局变量,但我的(数据)不是var(据我所知)并且我没有将它定义为我自己。 (data)是用户{}对象的属性。

那么我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:0)

“data”是回调函数的参数。它只在该功能的范围内。其他功能无法参考。调用回调函数时,“data”采用不同的值;引用函数外部的参数是没有意义的。