如何实现检测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
相关产品推荐
相关产品推荐

