У меня есть настройка соединения 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);
});
Как настроить приведенный выше код в соответствии с с этой целью?