如何在Firebase getDocs()获取完所有文档后执行后续操作
解决方案
首先明确:getDocs()本身是返回Promise对象的,完全可以调用.then()方法,你觉得无法添加大概率是写法问题。下面给你两种简洁的实现方式,任选其一即可:
方式1:继续使用await(推荐,代码更直观)
你当前的代码已经用了await,它会阻塞直到getDocs完成请求,所以后续操作直接写在forEach之后就可以,天然就是等待所有文档获取完成后执行的:
const q = this.itineraryService.findData(filters); // 等待getDocs完成请求 const querySnapshot = await getDocs(q); querySnapshot.forEach((doc) => { this.array.push({ ...doc.data(), id: doc.id}); }); // 这里写你要执行的后续操作,比如更新UI、调用其他接口等 console.log("所有文档已加载完成,执行后续操作"); this.doSomethingAfterFetch();
方式2:使用.then()链式调用
如果一定要用.then(),只需要去掉await,把处理逻辑和后续操作都放到链式回调里:
const q = this.itineraryService.findData(filters); getDocs(q) .then((querySnapshot) => { querySnapshot.forEach((doc) => { this.array.push({ ...doc.data(), id: doc.id}); }); // 这里写后续操作 console.log("所有文档已加载完成,执行后续操作"); this.doSomethingAfterFetch(); }) .catch((error) => { // 别忘了处理请求失败的情况 console.error("获取文档失败:", error); });
注意点
- 如果你用
await,必须确保外层函数是async函数,否则会报错; - 两种方式都能保证只有在所有文档获取完成后才执行后续代码,选你习惯的写法就行。
内容的提问来源于stack exchange,提问作者D.Hodges
相关产品推荐
相关产品推荐

