0

次のコードを見てください。

var server = net.createServer(function(socket) {
    //Code block A


    socket.on('connect', function() {
        //Code block B
    })

    socket.on('data' , function (data){
           //Code C     

    });

});

コードブロックAが実行され、コードブロックBが実行されない、またはその逆の可能性はありますか?もしそうなら、どのような場合に?

反例の場合:コードAが実行されると、コードCは、コードAが再度実行されることなく、複数回実行できます。

4

3 に答える 3

2

さて、あなたに電話をかけると.listen()、あなたはあなたが次の注文を受けることがわかると思います:

(Client connects) // "connect" event fires
   |
   v 
  [A]--*-----.  // This is the Socket's "connect" event firing.
       |     |  // B and C are bound to their respective events.
       |     |
       |     |
      [B] <--.  // Binds handler to "connection" event, but 
       |        // connection event fires instantly
       |
      [C] <--.  // "data" event is fired
             |
(Client sends data)

さらに、Bがバインドされているソケット参照がクロージャAのスコープ内にあるため、 AはBの後に実行を開始することはありません。

@ジョー、これもインタビューのように聞こえると思いますが、なんてこった!

于 2012-12-29T16:08:37.680 に答える
1

これはインタビュータイプの質問に少し似ていますが...

server.listen1)リスニングを開始する必要がないため、AもBも実行されません。

2)呼び出すと.listen、Aは実行されますが(.listenが成功した場合)、Bはクライアントがサーバーに接続するまで実行されません。接続時に、Aが実行され、次にBが実行されます(接続が成功したと想定)。

于 2012-12-29T15:44:22.423 に答える
0

ブロックBのコードが実行された場合、ブロックAのコードが実行されている必要があります。

于 2012-12-29T15:41:31.013 に答える