2015-12-12 1 views
5

Что произойдет, если вы вызываете метод «on» несколько раз для одной и той же функции в сокете? Вызывает ли это несколько раз просто поверх последней зарегистрированной функции или использует ли она больше ресурсов?socket.io client: как определить, установлен ли обработчик

Если это позже, то как вы определяете, зарегистрирован ли обработчик?

ответ

5

Я только что посмотрел на гнездо в Firebug, там есть член, называемый '_callbacks'.

Он содержит все зарегистрированные обратные вызовы, поэтому обнаружение если один уже зарегистрирован как просто как:

if (socket._callbacks[strHandlerName] == undefined) { 
    //Handler not present, install now 
     socket.on(strHandlerName, function() { ... }); 
    } 

Thats это!

+1

Для меня (с использованием socket.io-клиент/engine.io-клиент на Node.js), имена обработчиков всех есть $ впереди. то есть. 'socket._callbacks [" $ "+ strHandlerName]' – kryo

1

Я привык работать с ним таким образом.

var baseSocketOn = socket.on; 

    socket.on = function() { 
     var ignoreEvents = ['connect'] //maybe need it 

     if (socket._callbacks !== undefined && 
      typeof socket._callbacks[arguments[0]] !== 'undefined' && 
      ignoreEvents.indexOf(arguments[0]) === -1) { 
       return; 
     } 
     return baseSocketOn.apply(this, arguments) 
    }; 

Это лучшая практика

 Смежные вопросы

  • Нет связанных вопросов^_^