Redux Saga: «yield put» не работает для обратного вызова (websockets) - PullRequest
0 голосов
/ 25 апреля 2020

Имея сценарий, в котором я получаю данные из обратного вызова, т.е. Dispatcher.on ("get_service"). Теперь я хочу использовать ответ / данные, поступающие от обратного вызова, чтобы заполнить его в функции watchDispatcherChannel. Попробовал приведенный ниже код

Моя конечная цель - использовать ответ от функции обратного вызова и использовать метод put put (действие) для его передачи через редукторы.

    import { call, put, take, takeEvery } from 'redux-saga/effects';
    import { channel } from 'redux-saga';
    import {
        GET_SERVICE_START,
        GET_SERVICE_SUCCESS
      } from './actions';
    import ws from '../../websockets';
    import Dispatcher from '../../dispatcher';

    const dispatcherChannel = channel();

    export function* getService(options) {
          let payload = {
            username: options.username,
            password:options.password
          };
          ws.send(payload);
          Dispatcher.on("get_services", (data) => {
            dispatcherChannel.put({
            type: GET_SERVICE_SUCCESS,
            data});
          })
    }

    export function* watchDispatcherChannel() {
      while (true) {
        const action = yield take(dispatcherChannel)
        yield put(action)
      }
    }

    export default function* getServiceData() {
      yield takeEvery(GET_SERVICE_START, getService);
      yield takeEvery(dispatcherChannel, watchDispatcherChannel);
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...