2011-10-10 5 views
1

socket.io/examples/chat/app.jsのコードを理解しようとしています。 私はfn()という行が71行と73行で何を意味しているのか説明できません。 私はそれがコールバック関数だと思いますが、その定義はどこですか? app.jsから別の関数を呼び出していますか?
ソケットオブジェクトのプロトタイプ関数の呼び出しですか?socket.ioチャットのサンプルコードでfn()の意味

断片は(行69-78)である。

[...] 
    socket.on('nickname', function (nick, fn) { 
     if (nicknames[nick]) { 
      fn(true); 
     } else { 
      fn(false); 
      nicknames[nick] = socket.nickname = nick; 
      socket.broadcast.emit('announcement', nick + ' connected'); 
      io.sockets.emit('nicknames', nicknames); 
     } 
    }); 
[...] 

答えて

2

fnは、右ここで、コールバック関数に引数として渡されます。

socket.on('nickname', function (nick, fn) { 
             ^^ 

JavaScript関数はオブジェクトなので、彼らは変数に格納することができます - と他の関数に引数として渡されます。

この特定のケースでは、コールバック関数の使用は、Socket.IOのドキュメントの「取得謝辞」のセクションでduscussedされる - いくつかのデータとそれを呼び出すにはへの応答としてクライアントに戻ってメッセージを送信しそのメッセージ

+0

はい、私はそれに気付きましたが、その関数の実際の本体が何であるか(fnの意味)を調べる方法はありますか?クライアントは「ニックネーム」メッセージを送信します。この関数(nick、fn)が呼び出されると、しかし、やはりfnとしてどのような関数が渡されますか? ... – gvlax

+0

Ok @Sidnicious、私はそれを得たと思う。実際には、[リンク](http://socket.io/#how-to-use)の**データの送信と受信(謝辞)セクション**で説明されています – gvlax

+0

@gvlak:コールバック関数が定義されています[こちら](https://github.com/LearnBoost/socket.io/blob/0339e745fd75857b844f46368cc6d85aef295146/lib/namespace.js#L269)、namespace.js。 – s4y

0

FNは、ニックネーム上のイベントの中から呼び出される別の関数への参照です。

+0

しかし、私の問題は、たとえばfn(真)またはfn(偽)は何ですか... – gvlax

+0

ありがとうJason。私の理解によれば、私の場合の 'fn(true | false)'は、ページ[socket.io#how-to-use]の例の 'fn( 'woot');'(http:// socket .io /#how-to-use) – gvlax

0

JavaScriptでは、関数はオブジェクトとして扱われ、コールバック関数で引数として渡すことができます。