Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将socket.on内函数的值保存到全局变量?_Javascript_Sockets_Socket.io - Fatal编程技术网

Javascript 如何将socket.on内函数的值保存到全局变量?

Javascript 如何将socket.on内函数的值保存到全局变量?,javascript,sockets,socket.io,Javascript,Sockets,Socket.io,这可能非常简单,但我对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 i

这可能非常简单,但我对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()这样的东西在函数外部,如第一个示例中所示。
在这种情况下我怎么做


非常感谢。

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

需要明确的是:您不直接调用第二个示例中的函数。一旦“新闻”事件发生,就会调用它

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


我想您应该读了更多关于Javascript或的内容。

谢谢您的回答。问题是,我编写这段代码的目的是用从回调函数接收到的数据绘制一个图表,其中包含这些
p
值。现在,为了创建和更新图表,我需要这些不断出现的
p
值。问题是,如果我在socket.on内绘制图形,每次得到
p
值时,我都会得到该图形的一个新副本,这是我不想要的。因此,我的目标是在socket.on方法外部创建图形(它只创建一次图形),同时从socket.on内部更新值。我尝试将这些
p
点保存到数组中,我在socket.on外部声明,但是由于您所述的原因,数组不会将接收到的任何值保存到回调函数外部。这是我的问题。你可以参考这个链接来了解相关的代码:你真正的问题已经在另一个问题中解决了,对吗?我在这个问题上还有什么不清楚的地方需要我帮忙吗?是的,我的疑问已经消除了,非常感谢你的帮助