Javascript Redux Saga连接多个发电机以存储
这可能是相当基本的,但我还没有找到解决方案。我正在使用redux处理异步API调用。我需要将多个侦听器连接到应用商店。我在示例中尝试了Javascript Redux Saga连接多个发电机以存储,javascript,redux-saga,Javascript,Redux Saga,这可能是相当基本的,但我还没有找到解决方案。我正在使用redux处理异步API调用。我需要将多个侦听器连接到应用商店。我在示例中尝试了fork,第一个fork有效,但第二个无效。如何连接多个侦听器 export default function* mySaga() { yield [ fork(yield* takeEvery("FRIEND_FETCH_REQUESTED", fetchFriends)), // works fork(yield* takeEvery("C
fork
,第一个fork有效,但第二个无效。如何连接多个侦听器
export default function* mySaga() {
yield [
fork(yield* takeEvery("FRIEND_FETCH_REQUESTED", fetchFriends)), // works
fork(yield* takeEvery("CREATE_USER_REQUESTED", createUser)), // doesn't work
]
}
谢谢 这是因为
fork
采用一个函数,该函数返回一个promise或一个生成器函数,如下所示:
要使您的情况起作用,只需将yield*
放在生成器函数中,它应该都能起作用:
export default function* mySaga() {
yield [
fork(watchFetchFriends),
fork(watchCreateUser)
]
}
function watchFetchFriends() {
yield* takeEvery("FRIEND_FETCH_REQUESTED", fetchFriends);
}
function watchCreateUser() {
yield* takeEvery("CREATE_USER_REQUESTED", createUser);
}
顺便说一句,我不知道你的第一个
yield*
是如何工作的 遇到同样的问题,我找到了另一种方法
export default function* root(){
yield [
takeEvery("FRIEND_FETCH_REQUESTED", fetchFriends),
takeEvery("CREATE_USER_REQUESTED", createUser)
];
}
Redux Saga使用最新版本(0.15.3)中的
all
功能将多个Saga组合到Redux存储的一个根Saga中
import { takeEvery, all } from 'redux-saga/effects';
...
function *watchAll() {
yield all([
takeEvery("FRIEND_FETCH_REQUESTED", fetchFriends),
takeEvery("CREATE_USER_REQUESTED", createUser)
]);
}
生成器首先通过展开收益率并等待代理生成器takeEvery返回来评估收益率*。这就是为什么第一个收益率*works@YassineElouafi如果我们检测到
yield*
被传递给fork
,也许我们可以抛出一个异常?非常感谢@ganaraj,它解决了这个问题!如果您从“redux saga/effects”中包含导入{fork}XD@ganaraj这是不可能的,yield*
是在运行时级别处理的。userland代码看到的所有内容都是扁平的iterator@YassineElouafi已创建单据问题