У меня есть сетевое действие в моем приложении, которое запускает fetchUser каждый раз, когда приложение подключается к Интернету.
У меня есть другая сага, которая выглядит следующим образом
export function* watchNewMessage() {
const { id = {} } = yield take(SET_USER_ID)
const channel = yield call(subscribeToNewMessages, id)
while (true) {
const message = yield take(channel)
console.log(message)
}
}
Теперь проблема в том, что, когда приложение отключается, я прекращаю получать сообщения, что было бы хорошо, потому что мой метод повторного вызова должен обновить функцию saga, а поскольку он застрял в цикле true, он никогда не ожидает сброса. Так как мне изменить код для сброса каждый раз, когда вызывается SET_USER_ID?
Вот остаток соответствующего кода
export function subscribeToNewMessages(id) {
return eventChannel(emit => {
const pubsub = fetchNewMessage(emit, id)
return () => {
pubsub.unsubscribe()
}
}, buffers.expanding(100))
}
export const fetchNewMessage = async (emit, id) => {
return PubSub.subscribe(`${IOT_PREFIX}/discussion/${id}/message`).subscribe({
next: data => { emit(data.value) },
error: () => console.log('error'),
close: () => console.log('close'),
})
}