Когда выполняется обещание cacheEntryRemoved?

avatar
silviubogan
8 августа 2021 в 16:17
165
1
1

Документы говорят следующее:

cacheEntryRemoved — Обещание, которое позволяет вам дождаться момента времени, когда запись в кеше будет удалена из кеша, если она больше не будет использоваться/подписываться в приложении слишком долго или путем отправки API. utils.resetApiState.

Я визуально просмотрел документы и пока не понимаю эту часть так хорошо, как хотелось бы.

Означает ли приведенная выше цитата, что обещание выполняется, когда компонент, использующий запрос, размонтируется?

Что делать, если компонент получает потоковые обновления?

Рекомендуется ли частично отписываться от существующего соединения WebSockets сразу после выполнения обещания cacheEntryRemoved в onCacheEntryAdded, когда часть сообщений, получаемых от сервера WS, больше не нужна? Или лучше отписаться в функции очистки хука useEffect от этого канала из WS-соединения?

У меня есть одно соединение Socket.IO, которое используется для параллельного получения нескольких каналов сообщений, одному компоненту нужен канал, другому компоненту нужен другой, некоторым другим компонентам нужен тот же канал, что и существующему смонтированному компоненту. Можно ли отказаться от подписки на канал после выполнения этого обещания? Я разместил дополнительную информацию об этом в этот другой вопрос.

Источник

Ответы (1)

avatar
phry
8 августа 2021 в 19:54
2

Это довольно буквально: когда запись кеша удаляется из кеша.

Для каждой комбинации аргументов конечной точки у вас есть одна запись кэша.

Итак, когда первый компонент выполняет useChatRoomQuery("flower"), для него добавляется запись кэша (и функция onCacheEntryAdded запускается для записи "chatroom" с аргументом "flower"). Если другой компонент также использует useChatRoomQuery("flower"), используется та же запись кэша (без вызова onCacheEntryAdded).
И если компонент вызывает useChatRoomQuery("afterhour"), это создаст новую запись в кэше (и запустит другую onCacheEntryAdded).

После того, как последний компонент, использующий запись кэша, перестает использовать ее (путем размонтирования или замены на другой аргумент), запускается таймер (обычно 60 секунд — вы можете настроить это на уровне API и конечной точки через keepUnusedDataFor).
По истечении этого времени запись кэша удаляется, и обещание разрешается.

Таким образом, в целом, возможно, будет хорошей идеей отказаться от подписки на ваше сокетное соединение, а когда это будет последняя тема, которую вы слушали, также отключиться от нее. В конце концов, эти данные никого не интересовали какое-то время, и вы всегда можете переподключиться и добавить нового слушателя позже.