Реактивный AWS PUBSUB не может восстановить - PullRequest
0 голосов
/ 09 июня 2019

У меня есть сетевое действие в моем приложении, которое запускает 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'),
  })
}

1 Ответ

0 голосов
/ 10 июня 2019

Хорошо, у меня это работает

Я создал новую функцию

функция экспорта * watchNewMessage () { yield takeLatest (SET_USER_ID, manageSubscription) }

функция экспорта * manageSubscription () { const {id = {}} = взять доход (SET_USER_ID) константный канал = выход при вызове while (true) { const message = yield take (канал) console.log (сообщение) } }

А теперь работает отлично

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...