3

这可能是相当基本的,但我还没有找到解决方案。我正在使用redux-saga来处理我的异步 API 调用。我需要将多个听众连接到商店。我在示例中尝试过fork,第一个叉子有效,但第二个没有。如何连接多个听众?

export default function* mySaga() {
  yield [
    fork(yield* takeEvery("FRIEND_FETCH_REQUESTED", fetchFriends)), // works
    fork(yield* takeEvery("CREATE_USER_REQUESTED", createUser)),    // doesn't work
  ]
}

谢谢!

4

3 回答 3

4

这是因为根据此处的文档,fork它需要一个返回 Promise生成器函数的函数:

http://yelouafi.github.io/redux-saga/docs/api/index.html#forkfn-args

为了使您的情况正常,只需将其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*工作的。

于 2016-04-10T19:18:02.747 回答
1

遇到同样的问题,我找到了另一种方法

export default function* root(){
    yield [
        takeEvery("FRIEND_FETCH_REQUESTED", fetchFriends),
        takeEvery("CREATE_USER_REQUESTED", createUser)
    ];
}
于 2016-09-02T19:02:04.660 回答
0

Redux Saga 使用all最新版本(0.15.3)中的功能将多个 saga 组合成一个根 saga 用于 Redux 存储。

import { takeEvery, all } from 'redux-saga/effects';

...

function *watchAll() {
  yield all([
    takeEvery("FRIEND_FETCH_REQUESTED", fetchFriends),
    takeEvery("CREATE_USER_REQUESTED", createUser)
  ]);
}
于 2017-06-10T15:17:50.380 回答