2016-07-29 13 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をソケットで送信しようとしました。関数のトリガより後のコールバック設定変数

Database.getInfoのコールバック内にsocket['user'].join(info)を使用するたびに、私はTypeError: Object #<Object> has no method 'join'を取得します。

と外側、あなたはコールバックが呼ばれjoin()後の変数を設定しますので、私は、空のVARを得る推測できるよう..

私はそれがmysend使用するDatabase.getInfoからinfoを得るために何ができますかソケット?

+0

メソッドエラーとは - エラーメッセージはどうですか?ケアを共有する? –

+0

'socket.io'のドキュメントから' socket.join(...) 'を呼び出すことによって通常使用される 'join' APIがあります。あなたのコードは' .join'を使用する通常の方法とは異なります。本当に 'socket'とは何ですか?より多くのコードを明らかにするために気をつけますか? –

答えて

0

データベースコールバックはasyncです。あなたの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'が' undefined'であると言うかもしれません。その場合、問題はおそらくあなたが私たちに示していないコードである 'socket ['user']'にあります。 – jfriend00

+0

@ J.Doe - それは別の問題です。明らかに、まだあなたが 'socket'または' socket ['user'] 'をまだ使用しようとしていないときに設定しています。あなたの質問には何も開示されていません。非同期コールバックでデータを使用できるかどうかについては、Asynchronous Javascriptの基本101です。このようにしなければなりません。そうすれば、 'socket ['user']'で他の問題も修正する必要があります。 – jfriend00

関連する問題