在我的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调度同时发生,尽管其中一个(理论上)很久就完成了。
我有预感,这可能与我遇到的另一个问题有关。当Catalog查询中的.forEach()循环运行时,我的应用程序没有响应,并且在Catalog查询完成后,任何用户输入都会被注册。
有没有办法让forEach循环异步?