【发布时间】:2019-06-17 12:36:03
【问题描述】:
问题
Web 应用启动时,主要任务是检索存储在各种 Firestore 集合和子集合中的所有用户信息。
问题在于,即使我使用 Promise 和 Loading State 来防止空应用呈现,应用也会使用所有集合数据呈现,但具有子集合的集合除外。
过程
- If user is logged
-- Set Loading Status Active
-- Load Collection A
-- Load Collection B and forEach, load all sub-collection
-- Load Collection C
-- Set Loading Status Inactive
此时,应用程序被渲染,但只有集合 A 和集合 C。集合 B 已加载(我可以通过 Redux Logs 看到它)但在应用程序中看不到。
仅当我更改组件状态(例如打开/关闭菜单)时才会出现这些数据。
一些代码
以下是我检索带有子集合的集合的方法:
export function setCompanyJobs(user) {
return {
type: "SET_COMPANY_JOBS",
payload: loadCompanyJobs(user),
};
}
检索主集合的函数
export function loadCompanyJobs(user) {
return new Promise((resolve, reject) => {
let companyJobs = [];
db.collection("company").doc(user.selectedCompany).collection("jobs").get().then((jobs) => {
jobs.forEach((job) => {
loadJobLinkedServices(user, job).then((jobLinkedServices) => {
companyJobs.push({
id: job.id,
...
});
});
});
resolve(companyJobs);
}).catch(function (error) {
...
});
});
}
检索所有集合的子集合的函数
export function loadJobLinkedServices(user, job){
return new Promise((resolve, reject) => {
let jobLinkedServices = [];
db.collection("company").doc(user.selectedCompany).collection("jobs").doc(job.id).collection("linkedServices").get().then((linkedServices) => {
linkedServices.forEach((linkedService) => {
jobLinkedServices.push({
id: linkedService.id,
...
});
});
resolve(jobLinkedServices)
}).catch(function (error) {
...
});
})
【问题讨论】:
标签: reactjs firebase redux google-cloud-firestore