2016-07-29 44 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