Код: Выделить всё
const withTimeout = (onSuccess, onTimeout, timeout) => {
let called = false;
const timer = setTimeout(() => {
if (called) return;
called = true;
onTimeout();
}, timeout);
return (...args) => {
if (called) return;
called = true;
clearTimeout(timer);
onSuccess.apply(this, args);
};
}
socket.emit("hello", 1, 2, withTimeout(() => {
console.log("success!");
}, () => {
console.log("timeout!");
}, 1000));
Вопрос 2. Что дает onSuccess.apply(this, args);? Почему бы просто не вызвать onSuccess(args) прямо здесь? Это из-за того, где должен происходить console.log (с помощью onSuccess.apply(this, args);, записывающего его на консоль сервера, и onSuccess(args), записывающего его на консоль клиента) ?
Я должен признать, что это своего рода базовые концептуальные вопросы JS, но я никогда не сталкивался с ними на практике (я помню их только из книги, которую прочитал некоторое время назад), чтобы полностью понять их до тех пор (надеюсь) сейчас
Подробнее здесь: https://stackoverflow.com/questions/793 ... tion-apply
Мобильная версия