169 похожих чатов

Всем привет! Не понимаю, как работает onCleanup в watch и

watchEffect. Хочу прерывать предыдущий fetch запрос, идущий к api.

Дока:

watchEffect(async (onCleanup) => {
const { response, cancel } = doAsyncWork(id.value)
// `cancel` will be called if `id` changes
// so that previous pending request will be cancelled
// if not yet completed
onCleanup(cancel)
data.value = await response
})

Пример: у меня есть вот такой вотчер, который срабатывает каждый раз при изменении listedUsers. При срабатывании я отправляю запрос к апишке, чтобы получить общих друзей (getMutual). Если я буду быстро тогглить этот список, то с сервера будет прилетать ошибка (Too many requests).

Мой вотчер:

watch(
() => ({ ...listedUsers }),
async (newList, oldList, onInvalidate) => {
const ids = Object.keys(newList)
mutualFriends.value = await getMutual(ids)
}
)

Вопрос: как прерывать предыдущие запросы, чтобы избежать такого поведения? Нужно ли писать свою функцию cancel, как в примере? Как тогда ее возвращать, если getMutual асинхронная?

6 ответов

8 просмотров

Смотря как работает getMutual. Решение будет скорее всего через AbortController и его использование в либе/модуле запросов у вас

Alexey-Topunov Автор вопроса
Grigorii K. Shartsev
Смотря как работает getMutual. Решение будет скоре...

Я понял, то есть, cancel — это не функция отмены "по умолчанию"? Ее нужно ручками написать, а потом возвращать из апи, правильно?

Alexey-Topunov Автор вопроса
Alexey Topunov
Спасибо!

Пример в axios: https://axios-http.com/docs/cancellation

Alexey-Topunov Автор вопроса

Похожие вопросы

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
Всем вечера. Подскажите как лучше сделать. делаю на Д10 Например будет база данных на SQLite. в ней будет много таблиц. более 50шт Типа справочник. Содержать ID Name Id p...
Андрей Т 🐎
10
Я короче решил скомпилировать Nim в js, я думал он сработает как обычный транслятор. По итогу он мне создал файл с расширением js, и туда поместил кучу кода Вопрос, что это з...
𝕾𝖍𝖆𝖉𝖊 <suspense>
9
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
это группа токсиков или тех кто помогает?
Ибрагим
9
мы пытаемся подменить функцию, которая имеет меньше инструкций относительно функции, которой подменяем. https://www.reddit.com/r/jailbreakdevelopers/comments/w06ujy/mshookfun...
Óðinn
6
У кого-нибудь есть под рукой функция кодирования юникода, которая из фразы На русском сделает \u041d\u0430\u0020\u0440\u0443\u0441\u0441\u043a\u043e\u043c ?
Daniil Smolyakov
7
Карта сайта