我有几个传奇文件。 一用于导航,一用于编辑。 所以我想在我的编辑传奇中 “ SAVE_USER” 经过一些操作后,从导航传奇文件“ GO_TO_ROOT”插入传奇 等待直到完成,然后继续其余的“ SAVE_USER”吗?
editing-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) {
}
}
navigation-saga.js
export function* goToRoot(action) {
try {
console.log("preparing going to root")
yield call(goToRoot);
console.log("go to root success")
} catch (e) {
}
}
答案 0 :(得分:0)
可以在另一个传奇中调用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) { }
}
希望这会有所帮助。
答案 1 :(得分:0)
使用sagas的一个明显好处是,您可以更好地分离关注点。但是最终您会在sagas之间传递更多的消息(操作)。您的问题的一种解决方案是,根传奇调度一个动作(GO_TO_ROOT_SUCCESS),该动作可以由edit-aga侦听。像-
动作
const gotoSuccess = {
type: "GO_TO_SUCCESS",
};
navigation-saga.js
export function* goToRoot(action) {
try {
// some logic
yield put(gotoSuccess);
} catch (e) {
}
}
editing-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) {
}
}