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

Firebase Admin事务执行一次后永久挂起,无回调无Promise结果求助

Firebase Realtime Database事务永久挂起、回调不触发的解决方案

核心问题是你给事务传递了异步更新函数(async修饰的函数),Firebase Realtime Database的事务更新函数要求必须是同步执行的——它需要你直接返回要提交的新数据,而不是返回一个Promise。当你用async时,函数会自动返回Promise,Firebase会把这个Promise当作要写入的数据,导致事务无法正常完成,进而出现挂起、回调不触发、Promise既不resolve也不reject的情况。

解决步骤:

  • 移除更新函数的async关键字,确保函数同步执行,直接返回处理后的service对象或null。
  • 如果业务逻辑里有异步操作,需要把这些异步逻辑移到事务外部完成,再将结果带入事务中;不推荐在事务内做异步操作,会增加重试开销和复杂度。

修正后的代码示例:

import * as fb from 'firebase-admin';

const fbApp = fb.initializeApp({
  projectId: 'my-project',
  databaseURL: 'https://my-project.firebaseapp.com'
});

// ...

await fbApp
.database()
.ref(`services/${serviceId}`)
.transaction((service: Service | null) => {
  console.log(service); // 现在会根据重试逻辑正常输出

  if(service) {
    // 同步执行逻辑并修改service
  }

  return service;
}, (e, committed, data) => {
  console.log(e, committed, data); // 事务完成后会正常触发
});

console.log('done'); // 现在会正常执行到这里

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:57:18