【问题标题】:Changing global variable from Socket.io Callback从 Socket.io 回调更改全局变量
【发布时间】:2015-06-25 05:17:24
【问题描述】:

客户端代码:

var app = {
    data: {
        user: null
    }
};

var client = {
    connect: function () {
        client.data.socket.on('connectCallback', function (obj) {
            if (obj.userFound) {
                app.data.user = obj.user;
                return app.data.user;
            }
        });
        /** 
        Other callbacks 
        **/
    };
};

app.data.user 始终是null,我还尝试了第二个函数来更改变量。服务器返回的obj不是null,我已经查过了。

使用var foo = client.data.socket.on 之类的代码不起作用,因为 foo 是一个 socket.io 对象。传递自定义回调函数也不起作用,因为我无法将它传递给 socket.io 回调。

我不想像某些人认为的那样进行 ajax 调用。

【问题讨论】:

  • "app.data.user 总是null" 在什么代码中?你还没有展示你在哪里/如何使用它,这是问题的一个非常重要的部分。
  • 我使用开发者工具调试代码,调用回调后我使用控制台检查变量。还有其他代码可以更改正确执行的页面内容。

标签: javascript node.js asynchronous socket.io


【解决方案1】:

app.data.user 始终是null,我还尝试了第二个函数来更改变量。服务器返回的obj不是null,我已经查过了。

也就是说有两种可能:

  1. 您正在检查app.data.user回调发生之前,或者

  2. 即使obj 不是nullobj.userFound 是假的,或者obj.usernull

我的怀疑是#1:您在回调发生之前检查值,但由于您没有显示您尝试使用app.data.user 并获取null 的代码,所以我不能肯定地说。

【讨论】:

  • 我已经检查了 #2,obj 不是 null 并且 obj.userFound 是 true。 #1 不可能是问题,因为我添加了断点来检查何时必须检查变量
  • @LarsUnbekannt:然后有一个。 :-)(可能性,即。)
  • 还有第三种:回调调用后user设置为null。
  • 它没有在任何地方设置为空
  • @MauricePerry:啊,好点子!第四个:app 被遮住了。第五个:app.data 在回调后被重新分配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 2013-03-14
  • 2013-07-08
相关资源
最近更新 更多