Javascript Redux Saga连接多个发电机以存储

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

这可能是相当基本的,但我还没有找到解决方案。我正在使用redux处理异步API调用。我需要将多个侦听器连接到应用商店。我在示例中尝试了
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已创建单据问题