React Native调用Firestore recursiveDelete遇栈溢出错误求助
解决Firebase云函数recursiveDelete栈溢出错误
问题根源
你直接把前端的DocumentRef实例传给Callable云函数,这个对象在跨端序列化/反序列化时会变成带有循环引用的复杂结构,导致内部map处理时触发栈溢出,和是否有子集合无关。
修复步骤
1. 前端修改:传递文档路径字符串而非Ref实例
把原来传ref改成传ref.path,这是一个简单的字符串,不会有序列化问题:
var functions = firebase.functions() let deleteFn = functions.httpsCallable('deleteSubs'); let ref = db.collection("Posts").doc(post.key) deleteFn({path: ref.path}) // 这里传路径字符串
2. 云函数修改:通过路径重构DocumentRef并添加错误捕获
云函数里先把接收的路径字符串转换成Admin SDK的DocumentRef,同时用try-catch处理可能的错误,避免未处理的Promise拒绝:
const admin = require('firebase-admin'); admin.initializeApp(); const firestore = admin.firestore(); exports.deleteSubs = functions.https.onCall(async(data, context) => { try { const docRef = firestore.doc(data.path); await firestore.recursiveDelete(docRef); return { success: true }; } catch (error) { throw new functions.https.HttpsError('internal', '删除失败', error.message); } });
额外注意事项
- 确保云函数中使用的是Firebase Admin SDK的Firestore实例,不是客户端SDK的实例
- recursiveDelete属于Admin SDK的内部方法,只要使用对应版本的Admin SDK即可正常工作
- 若文档层级极深,可考虑传入
bulkWriter参数优化批量删除性能,但当前问题的核心是参数传递错误
内容的提问来源于stack exchange,提问作者maniha
相关产品推荐
相关产品推荐

