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

标签 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 is NOT p, it is undefined.

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

非常感谢。

最佳答案

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

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

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

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

关于javascript - 如何将socket.on内部函数的值保存到全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36714822/

相关文章:

java - 用java制作一个可更新的程序?

javascript - Socket.io - 如果 "client"发出错误数据,防止服务器崩溃

node.js - Redis Pub/Sub 聊天室

javascript - maxFontSizeMultiplier 支持所有 <Text/>

javascript - JS点击按钮时显示2个文本框

javascript - 自定义对象如何继承Javascript Object

javascript - Ajax 提交功能不起作用

java - httpClient:如何检查连接是否已被服务器端关闭

c# - 在 Unity3D 中使用 Windows.Networking.Sockets

nginx - WebSocket 连接到 'ws://localhost/_next/webpack-hmr' 失败 : WebSocket is closed before the connection is established in Next. js 与 Nginx