2

在我的 react-native 应用程序中,我正在查询一个集合以获取非常少量的数据,这些数据本身通常需要不到 1 秒的时间才能完成。我还想同时查询一个单独的集合以获取大量数据(~1MB),通常在 5-10 秒内完成。

我的问题是,如果我在较小的查询完成之前查询大型集合,则较小的查询将在较大的查询完成之前完成。

我较小的(价格)查询:

export const getPrices = () => {
  return dispatch => {
    dispatch({ type: GETTING_PRICES });
    let prices;
    firestore
      .collection('settings-daily-market')
      .orderBy('MarketDate', 'desc')
      .limit(1)
      .get()
      .then(snapshot => {
        snapshot.forEach(doc => {
          const priceUpdated = moment(doc.data().MarketDate).format(
            'MMMM D, YYYY'
          );
          const Pd = doc.data().PdMarket;
          const Pt = doc.data().PtMarket;
          const Rh = doc.data().RhMarket;
          const PdHedge = doc.data().PdHedge;
          const PtHedge = doc.data().PtHedge;
          const RhHedge = doc.data().RhHedge;
          prices = { Pd, Pt, Rh, PdHedge, PtHedge, RhHedge, priceUpdated };
        });
        dispatch({ type: FETCH_PRICES, payload: prices });
      });
  };
};

我更大的(目录)查询:

export const getCatalog = () => {
  return dispatch => {
    dispatch({ type: GETTING_CATALOG });
    let completeCatalog = {};
    firestore
      .collection('records-catalytic-converters')
      .get()
      .then(snapshot => {
        snapshot.forEach(
          doc => (completeCatalog[doc.data().Name] = doc.data())
        );
        dispatch({ type: GET_CATALOG, payload: completeCatalog });
      });
  };
};

本质上,FETCH_PRICES 和 GET_CATALOG 调度同时发生,尽管其中一个(理论上)比另一个早完成。

我有一种预感,这可能与我遇到的另一个问题有关。当目录查询中的 .forEach() 循环运行时,我的应用程序没有响应,并且在目录查询完成后任何用户输入都会被注册。

有没有办法使 forEach 循环异步?

4

0 回答 0