Firebase用户更新函数Promise未触发then分支问题求助
问题分析与解决方案
听起来你遇到的问题很典型——数据库明明已经更新成功,但后续绑定的then回调却完全没触发,这大概率是因为你的updateCurrentUser函数没有正确返回Firebase异步操作的Promise。
核心原因
Firebase的数据库操作(比如update方法)本身是会返回Promise的,但如果你的updateCurrentUser函数内部执行了这个操作,却没有把这个Promise返回给调用者,那么你调用updateCurrentUser().then(...)时,then绑定的其实是一个未定义的空值,自然不会触发回调逻辑。
举个错误实现的例子:
// 错误写法:没有返回Firebase操作的Promise updateCurrentUser(uteIn) { firebase.database().ref('users/' + uteIn.id).update(uteIn); }
这种情况下,函数执行完Firebase的更新就结束了,但没有把异步操作的Promise传递出去,外部的then根本“抓不到”异步操作完成的信号,哪怕数据库已经更新成功。
而你提到“直接在该函数上实现then分支会被触发”,应该是指直接调用Firebase原生的update方法并绑定then,比如:
// 这种写法能触发then,因为update本身返回了Promise firebase.database().ref('users/' + uteIn.id).update(uteIn).then(() => { // 这里的代码会正常执行 })
修复方案
只需要让updateCurrentUser函数返回Firebase操作的Promise即可:
// 正确写法:返回Firebase更新操作的Promise updateCurrentUser(uteIn) { return firebase.database().ref('users/' + uteIn.id).update(uteIn); }
如果你的函数是async/await风格的,也要确保返回异步操作的结果:
async updateCurrentUser(uteIn) { // 确保返回异步操作的Promise return await firebase.database().ref('users/' + uteIn.id).update(uteIn); }
额外检查点
如果已经返回了Promise但then还是没触发,可以排查这两点:
- 函数内部是否有
try/catch块吞掉了错误?如果update操作出错,catch里没有重新抛出错误,可能会导致Promise被静默resolve,但你的情况是数据库更新成功,这个概率较低。 - 确认调用
updateCurrentUser时的this.statoUtente上下文是否正确?不过你说数据库已经更新成功,说明函数执行正常,这个可以排除。
这样修改后,外部的then应该就能正常捕获到异步操作完成的信号,执行你需要的后续逻辑了。
内容的提问来源于stack exchange,提问作者Riccardo Cassano
相关产品推荐
相关产品推荐

