回调设置变量晚于函数触发器

时间:2016-07-29 04:42:31

标签: javascript callback socket.io

handler: function(item){
    var info;
    Database.getInfo(item, function(data){ 
        if(data)
            info = data.information
    });
    // Socket.io join handler
    socket['user'].join(info)
}

现在我尝试让info内的Database.getInfo与套接字一起发送。

每当我在socket['user'].join(info)的回调中使用Database.getInfo时,我都会获得TypeError: Object #<Object> has no method 'join'

在外面,你可以猜到我得到一个空的var,因为回调在调用join()之后设置变量。

如何从info获取Database.getInfo以使用套接字?

1 个答案:

答案 0 :(得分:0)

数据库回调是异步的。稍后调用它,而handler函数的其余部分继续运行。您只能在回调本身内使用data结果,因为这是您知道信息实际可用时间的唯一位置。

handler: function(item){
    Database.getInfo(item, function(data){ 
        if(data) {
            let info = data.information
            // Socket.io join handler
            socket['user'].join(info);
        }
    });
    // any code placed here runs BEFORE the getInfo() callback runs
}