react-native - 当某个 Action 发生时如何关闭 eventChannel

标签 react-native redux-saga

我有一个 eventChannel 用于监听 webSockets,这工作正常。

我还想监听 USER_LOGGED_OUT 操作并关闭 channel 。

如果出现套接字错误或套接字关闭,我将通过发出 END 从 channel 内关闭 channel ,但如何根据外部操作执行此操作?

这是 channel 循环:

export function* websocketWatcher() {
  const tokenResponse = yield take(RECEIVE_USER_TOKEN);
  const accessToken = tokenResponse.payload.data.access_token;

  const channel = yield call(createWebsocketChannel, accessToken);
  try {
    while (true) {
      const action = yield take(channel);
      yield put(action);
    }
  } finally {
    console.log('Websocket channel terminated');
  }
}

最佳答案

我自己回答这个问题..

我刚刚在文档中找到了channel.close()。不知道我怎么错过了。我通过 channel (传入套接字数据)和注销操作之间的竞争解决了这个问题。

export function* websocketWatcher() {
  const tokenResponse = yield take(RECEIVE_USER_TOKEN);
  const accessToken = tokenResponse.payload.data.access_token;

  const channel = yield call(createWebsocketChannel, accessToken);
  try {
    while (true) {
      const { logoutAction, socketAction } = yield race({
        logoutAction: take(USER_LOGGED_OUT),
        socketAction: take(channel)
      });

      if (logoutAction) {
        channel.close();
      } else {
        yield put(socketAction);
      }
    }
  } finally {
    console.log('Websocket channel terminated');
  }
}

关于react-native - 当某个 Action 发生时如何关闭 eventChannel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44926758/

相关文章:

javascript - 如何使加载程序在 View 上居中

javascript - 如何在MainApplication.java中获取环境变量 react native

javascript - 导入函数时未定义不是函数

javascript - react native 导航: Undefined is not a function

reactjs - 如何减小 React Native .apk 文件的大小?

redux - 2021 年我应该使用 redux-saga 或 redux-thunk 做什么?

reactjs - 快速连续调度相同的 redux 操作

android - React Native 中 redux-saga 的 API 集成错误

reactjs - ReactJS 中的高阶组件 - 从数据组件扩展功能

reactjs - redux saga 返回 SagaTestError : put expectation unmet when checking api call