You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现检测Firestore文档是否存在并返回布尔值的工具函数

问题原因分析
  • 所有async声明的函数,返回值必然是Promise对象,这是JavaScript异步语法的固定规则。且Firestore的get()操作本身是需要发起网络请求的异步IO行为,结果不可能同步获取,不存在让该函数直接返回布尔值的方案,期望同步获取异步操作结果的思路不符合JavaScript的执行逻辑。
  • 你当前的代码连正确的Promise<boolean>都无法返回,原因是你没有将内部判断结果作为外层函数的返回值抛出,then()回调内的return只会把值传递给Promise链的下一级,不会作为docExists函数的返回值。
修复后的实现

不需要混用await和then,直接通过await拿到快照后返回exists属性即可:

async function docExists(docName, docId) {
  const docRef = db.collection(docName).doc(docId);
  const docSnapshot = await docRef.get();
  return docSnapshot.exists;
}

该函数返回值类型为Promise<boolean>,可以通过异步方式拿到最终的布尔结果。

调用方式

异步作用域内调用

如果外层逻辑也在async函数内,直接用await接收结果即可:

// 示例:在async函数中调用
async function yourBusinessLogic() {
  const userExists = await docExists('users', 'user_id_123');
  // 后续直接使用userExists布尔值做判断
  if (userExists) {
    // 文档存在的逻辑
  }
}

同步作用域内调用

如果外层无法声明为async,通过then回调接收结果:

docExists('users', 'user_id_123').then(userExists => {
  if (userExists) {
    // 文档存在的逻辑
  }
})

内容的提问来源于stack exchange,提问作者jl98

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:54:02