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

现在我尝试使Database.getInfo中的info与套接字一起发送。回调设置变量晚于功能触发器

每当我使用socket['user'].join(info)里面的Database.getInfo的回调我得到了TypeError: Object #<Object> has no method 'join'

而且外面,你可以猜我得到一个空的变种,因为回调设置join()被称为后变量...

我能做些什么来从Database.getInfoinfo使用它mysend的插座?

+0

当你说方法错误 - 什么是错误信息?小心分享? –

+0

从'socket.io'文档中,我可以看到有一个'join' API,它通常通过调用'socket.join(...)来使用'您的代码看起来不像通常使用'.join' 。 'socket'真的是什么?小心揭示更多的代码? –

回答

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 
} 
+0

每当我在回调里面使用它时,我会得到连接没有方法的错误 –

+1

@ J.Doe - 如果你想要帮助那个错误,你必须添加到你的问题到底是你尝试了什么代码和你的错误信息得到。 “join没有方法”不可能是这段代码的错误信息所说的。它可能会说'.join'是'未定义的'。如果是这样的话,那么问题可能是'socket ['user']'这是你没有给我们看的代码。 – jfriend00

+0

@ J.Doe - 那是另一个问题。显然,当你尝试使用它时,你还没有设置'socket'或'socket ['user']'。您的问题中没有任何可以帮助我们解决的问题。关于何时可以在异步回调中使用数据的一点是Asynchronous Javascript basics 101.您必须这样做。这会导致你必须用'socket''user']'修复你的其他问题。 – jfriend00