Uncaught TypeError错误修复:database_ref1.child(...).remove(...)不是函数
修复Uncaught TypeError: database_ref1.child(...).remove(...) is not a function错误
错误原因
你代码里的remove() ({}, (error) => {})是语法错误:remove()调用后返回的是Promise对象,不是函数,所以后面加括号会触发"不是函数"的错误。Firebase Realtime Database的remove()方法要么不带参数直接调用(用Promise处理结果),要么直接传入回调函数,不能先调用remove()再传参数。
修复方案
方案1:修正回调写法
去掉多余的括号,直接给remove()传入回调函数:
function deleteUser() { const user = firebase.auth().currentUser; user.delete().then(() => { // 用户账户删除完成 }).catch((error) => { // 账户删除出错 // ... }); const database_ref1 = database.ref(); // 修正语法:直接给remove传回调 database_ref1.child('users/' + user.uid).remove((error) => { if (error) { // 数据库数据删除失败 console.error('删除用户数据失败:', error); } else { // 数据库数据删除成功 console.log('用户数据已删除'); } }); }
方案2:用Promise统一处理异步操作
和user.delete()保持一致,用Promise的then/catch处理remove()结果,同时确保两个异步操作都完成:
function deleteUser() { const user = firebase.auth().currentUser; if (!user) return; // 先判断用户是否登录,避免null报错 // 并行处理账户删除和数据库数据删除 Promise.all([ user.delete(), database.ref('users/' + user.uid).remove() ]).then(() => { console.log('用户账户及对应数据已全部删除'); }).catch((error) => { console.error('删除操作失败:', error); }); }
这个方案能避免单个操作失败时出现数据不一致的情况,代码风格也更统一。
重要提醒
别忽略这个错误:虽然当前功能看似正常,但语法错误会导致数据库删除操作的结果处理逻辑完全失效,后续可能出现数据残留或报错的情况,必须修复。
内容的提问来源于stack exchange,提问作者Ling Travis
相关产品推荐
相关产品推荐

