0

我正在尝试创建一个使用 rxfire 从 Firestore 获取数据的史诗。在每次发出值时,都需要调度一个动作。我的代码如下所示:

const fetchMenu = (action$, _state$) => {
  return action$.pipe(
    ofType(Types.FETCH_MENU_REQUESTED),
    flatMap((async ({ resID }) => {
      const firestore = firebase.firestore();
      const menuRef = firestore.collection('menus').where('resID', '==', resID);
      return collectionData(menuRef, 'id')
      .pipe(
        map(val => {
          return Creators.fetchMenuSuccess(val);
        })
      )
    }
    )),
  );
};

但是,我收到了错误Actions must be plain objects. Use custom middleware for async actions.

据我了解,pipe操作员将我的值包装在一个 observable 中,这就是我收到错误的原因,但我不确定该怎么做才能只返回操作。我对 rxjs 还是有点陌生​​,所以非常感谢任何帮助。

4

1 回答 1

1

您的flatMap回调是异步的,这意味着它不会返回发出fetchMenuSuccess操作的可观察对象,而是返回解析为可观察对象的承诺。Rx 将自动解包 promise,这意味着从这个史诗返回的 observable 发出 observable,而不是订阅它们并发出自己的值。

删除async关键字应该可以修复它。

于 2020-09-13T20:54:11.877 回答