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)

此外,A永远不会在 B 之后开始执行,因为B绑定到的套接字引用位于闭包A的范围内。

@Joe,我也认为这听起来像是采访,但嘿!

于 2012-12-29T16:08:37.680 回答
1

这闻起来有点像面试类型的问题,但是...

1)A或B都不会运行,因为没有server.listen让它开始监听。

2)如果您调用.listen,则 A 将运行(如果 .listen 成功)但 B 在客户端连接到服务器之前不会运行。在连接上,A 将运行,然后是 B(假设连接成功)。

于 2012-12-29T15:44:22.423 回答
0

如果块 B 中的代码被执行,那么块 A 中的代码一定已经被执行。

于 2012-12-29T15:41:31.013 回答