Socket.io - предотвращает запуск нескольких событий - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть настройка соединения socket.io между моим iOS приложением и моим nodeJS бэкэндом.

После подключения я настраиваю сокет следующим образом:

    socket.on(EVENT_NAME1, params =>
        someFunc(socket, params)
    );

    socket.on(EVENT_NAME2, params =>
        someOtherFunc(socket, params)
    );

    socket.on(EVENT_NAME3, (params, callback) =>
        someThirdFunc(socket, params, callback)
    );

...

проблема в том, что иногда мое iOS приложение запускает несколько событий, и я хотел бы убедиться на бэкэнде, что если несколько одинаковых событий поступают из одного сокета в 250ms, выполняется только первое.

Я создал эту функцию:

const timeoutEvent = (eventName, socket, params, callback, func) => {
    socket.off(eventName);
    setTimeout(() => {
        if (callback) {
            socket.on(eventName, (params, callback) => {
                func(socket, params, callback);
            });
        } else {
            socket.on(eventName, params => {
                func(socket, params);
            });
        }
    }, 250);
};

, которую я хочу использовать так:

socket.on(EVENT_NAME3, (params, callback) => {
    timeOutEvent(EVENT_NAME3, socket, params, callback, someThirdFunc)  
    someThirdFunc(socket, params, callback);
})

Проблема в том, что эти строки не будут работать, поскольку eventName, params и callback поступают из функции on, а не из функции более высокого уровня timeoutEvent -

socket.on(eventName, (params, callback) => {
    func(socket, params, callback);
});

Как настроить приведенный выше код в соответствии с с этой целью?

1 Ответ

0 голосов
/ 13 апреля 2020

В моей функции connect я добавил:

socket.enabled = true

socket.on(EVENT_NAME, (params, callback) => {
    socket.enabled && someFunc(socket, params, callback);
    preventMutlipleHandlers(socket);
});

, а затем создал эту забаву c:

const preventMutlipleHandlers = socket => {
    socket.enabled = false;
    setTimeout(() => {
        socket.enabled = true;
    }, 250);
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...