redux-saga: вызов саги из другого файла - PullRequest
0 голосов
/ 05 июля 2018

У меня есть несколько саг файлов. Один для навигации, другой для редактирования. Так что я хочу в моей саге редактирования "SAVE_USER" после какого-либо действия вставьте сагу из файла саги навигации "GO_TO_ROOT" подождать, пока он не закончится, и продолжить оставшуюся часть "SAVE_USER"?

редактирование-saga.js

export function* sagaUser(action) {
  try {
    console.log("preparing user")
    console.log("saving user")
     yield put({
      type: "GO_TO_ROOT",
      payload: { true }
    });
    console.log("user saved")
  } catch (e) {
  }
}

навигация-saga.js

export function* goToRoot(action) {
  try {
    console.log("preparing going to root")
    yield call(goToRoot);
    console.log("go to root success")
  } catch (e) {
  }
}

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Очевидным преимуществом использования саг является то, что вы можете добиться лучшего разделения проблем. Но в итоге вы получаете гораздо больше сообщений (действий) между сагами. Одним из решений вашей проблемы может быть корневая сага, отправляющая действие (GO_TO_ROOT_SUCCESS), которое может прослушиваться сагой edit. Что-то вроде -

действие

const gotoSuccess = {
  type: "GO_TO_SUCCESS",
};

навигация-saga.js

export function* goToRoot(action) {
  try {
     // some logic
     yield put(gotoSuccess);
  } catch (e) {
  }
}

редактирование-saga.js

export function* sagaUser(action) {
  try {
     yield put({
      type: "GO_TO_ROOT",
      payload: { true }
    });

     yield take("GO_TO_SUCCESS");

    // some more logic
  } catch (e) {
  }
}
0 голосов
/ 05 июля 2018

Можно просто позвонить yield в другой саге. Например:

import { goToRoot } from './navigation-saga.js'

export function* sagaUser(action) {
  try {
    console.log("preparing user")
    console.log("saving user")

    yield goToRoot({
      type: "GO_TO_ROOT",
      payload: { true },
    });

    console.log("user saved")
  } catch (e) { }
}

Надеюсь, это поможет.

...