【问题标题】:How to save value from a function inside socket.on to a global variable?如何将 socket.on 内部函数的值保存到全局变量中?
【发布时间】:2016-04-19 09:51:20
【问题描述】:

这可能很简单,但我对用 Javascript 编程和使用 Socket IO 还很陌生。

当我想从函数内部为全局变量赋值时,过程相当简单:

var j;

function a(){
j=2;

}
a();
//j is now 2

我现在的问题是,我有一个名为 socket.on 的方法,其中有一个函数,如下所示:

var j;

socket.on('news', function (p) {
j=p; 
//in here, j is equal to p
});
//in here, j is NOT p, it is undefined.

现在,在这种情况下,我希望我的全局变量 j 具有 p 的值,但是当我在函数之外打印 j 时,它是未定义的。我认为这是因为我需要像第一个示例中那样的函数之外的 a(); 之类的东西。 在这种情况下我该怎么做?

非常感谢。

【问题讨论】:

    标签: javascript sockets socket.io


    【解决方案1】:

    socket.on的第二个参数是所谓的回调函数,是javascript中很常见的一种模式。在您的示例中,您正在收听“新”事件。发生此事件时,将使用参数p 触发回调。当然这个参数只在回调函数内部可用。

    要明确:您确实不直接调用第二个示例中的函数。一旦 'news' 事件发生,它就会被调用。

    回调模式非常方便,因为它允许您编写非阻塞代码。在您等待“新闻”事件发生时,socket.on 调用之后的任何代码都将正常执行。这就是无法在回调之外访问p 的原因:您不知道回调将在什么时间点被调用。

    我想您阅读了更多关于 Javascript 的 event loop 或 functions and their scope 的内容。

    【讨论】:

    • 感谢您的回答。问题是我编写此代码的目标是使用从回调函数接收到的数据以及这些 p 值绘制图表。现在,为了创建和更新图表,我需要这些不断出现的p 值。问题是,如果我在 socket.on 中绘制图形,每次获得 p 值时都会得到该图形的新副本,这是我不想要的。所以我的目标是在 socket.on 方法之外创建图表(它只创建一次图表),同时从 socket.on 中更新值。
    • 我尝试将那些p 点保存到我在socket.on 之外声明的数组,但由于您所说的原因,该数组不会将它接收到的任何值保存到外部回调函数。这是我的问题。
    • 有问题的代码可以参考这个链接:stackoverflow.com/questions/36697138/…
    • 看起来你真正的问题已经在另一个问题中解决了,对吧?我在这个问题上还有什么不清楚的地方可以帮忙吗?
    • 是的,我的疑惑已经解决,非常感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 2021-03-12
    • 2022-08-02
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多