Показать сообщение отдельно
  #14 (permalink)  
Старый 02.03.2024, 13:02
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,510

Nexus, +.

ksa, ну вот примерно как Nexus бы сделал, только выкинул бы возврат оригинального connect (и занулял бы connectionPromise по завершению, чтоб не висело в памяти: что бы там оно не возвращало - оно нам не нужно с гарантией 99%). Ну и connectionPromise назвал бы pendingConnection или просто pending. Но это всё фигня. :⁠)

Кстати нашёл пока лучшее применение chat gpt - придумывать названия переменным и функциям. Решил самую сложную задачу в программировании можно сказать.:⁠)

P.S. В тему о промисах - знает кто-нить готовую либу с нормальной поддержкой, которая бы умела бы делать debounce асинхронной функции, но не простой, а чтоб если таймер вышел - он всё равно не позволял повторного запуска пока предыдущий асинхронный вызов не завершится. Т.е. допустим у нас
const debounced = debounce(async (arg) => {
  console.log(arg);
  await delay(1000);
}, 100);
debounced(1);
await delay(300);
debounced(2);
await delay(300);
debounced(3);

// большинство либ - 1, 2, 3
// иногда - 1, но это debounce, а throttle
// надо - 1, 3

Второй вариант который тоже нужен - более стандрантый, но споддрежкой AbortControler'a, чтоб если таймер вышел и снова вызвали когда предыдущий промис ещё идёт - тригеррил AbortControler.abort();:
// надо - 1/aborted, 2/aborted, 3


Сейчас пишу свою версию, но там не всё так просто..:⁠)
__________________
29375, 35

Последний раз редактировалось Aetae, 02.03.2024 в 14:05.
Ответить с цитированием