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 ответов

25 просмотров

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

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

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

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

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

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта