javascript - 更改socket.on中的变量

标签 javascript jquery node.js socket.io

我正在尝试使用 node.js 做一个项目,但在显示变量时遇到了问题。

客户端这部分代码:

$(document).ready(function () {
    var socket = io.connect('http://localhost:8000');
    var a = 0;
    var b = 0;

    socket.on('request', function (data) {
        a = data;
    });

    socket.on('read', function (data) {
        b = data;
    });

    var q = a * b;
    $('span#calculate').html(q);

    // Etc...
});

正常情况下它应该显示此计算的结果,但它仍然显示 0(这意味着 socket.on 中的变量没有更改)。

如何解决这个问题?

最佳答案

欢迎来到异步代码的世界!没有什么是线性运行的。

您的代码只是为事件readrequest添加监听器,而不是实际更改a和b。因此,ab 仍然是 0,直到执行处理程序,即服务器通过 read 发送消息时code> 或 请求 事件。

您可以做的就是将事件触发后您想要发生的任何事情放置在函数中。然后在事件处理程序中调用该函数:

$(document).ready(function () {
  var socket = io.connect('http://localhost:8000');
  var a = 0;
  var b = 0;
  var calculate = $('span#calculate');

  function recalculate(q) {

    calculate.html(q);

    //more...    
  }

  socket.on('request', function (data) {
    a = data;
    recalculate(a * b);
  });

  socket.on('read', function (data) {
    b = data;
    recalculate(a * b);
  });

});

关于javascript - 更改socket.on中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17252020/

相关文章:

node.js - 使用 Mongoose、Express 删除用户

javascript - Jquery计算旋转矩形的边界框

Javascript - 如何检查带有类的元素是否存在于纯字符串中?

jquery - 搜索引擎看不到我的隐藏页面内容吗?

jquery - 如何在导航项上添加 bootstrap 4 事件类?

node.js - Gekko Auto Trading bot 在 ubuntu 上安装失败

javascript - Gulp src 文件顺序

javascript - Knockout.js 与 CoffeeScript、继承、对象实例化

javascript - 有没有一种简单的方法可以创建一次显示多个月份的月/年日期选择器?

javascript - 编写适用于客户端 javascript 和服务器端 NodeJs 模块的 javascript 代码