首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Firestore - transaction失败: TypeError: transaction.set(...).then不是函数

Firestore是一种云数据库服务,由Google Cloud提供。它是一种灵活、可扩展的NoSQL文档数据库,适用于构建实时应用程序和移动应用程序。

在Firestore中,事务(transaction)是一种用于执行一系列读取和写入操作的机制,以确保数据的一致性和完整性。事务可以保证在多个客户端同时修改同一文档时,数据的正确性。

根据提供的错误信息,"TypeError: transaction.set(...).then不是函数",这个错误表明在事务中使用了错误的语法。在Firestore中,事务应该使用runTransaction方法来执行。下面是一个示例代码,展示了如何在Firestore中执行事务:

代码语言:txt
复制
const transaction = db.runTransaction(async (transaction) => {
  const docRef = db.collection('collection').doc('document');

  // 读取文档
  const doc = await transaction.get(docRef);
  const data = doc.data();

  // 修改文档
  data.field = 'new value';
  transaction.set(docRef, data);

  return data;
});

transaction.then((data) => {
  console.log('事务执行成功', data);
}).catch((error) => {
  console.log('事务执行失败', error);
});

在这个示例中,我们使用runTransaction方法来执行事务。在事务函数中,我们首先读取了一个文档,然后修改了文档的某个字段,并使用transaction.set方法将修改后的数据写回数据库。最后,我们返回修改后的数据。

Firestore的事务机制可以用于各种场景,例如在购物应用中更新库存数量、在社交应用中更新用户的点赞数等。通过使用事务,我们可以确保在多个客户端同时修改同一文档时,数据的一致性和完整性。

关于Firestore的更多信息和使用示例,您可以参考腾讯云提供的文档和产品介绍页面:

请注意,以上提供的链接是腾讯云的相关文档和产品介绍,仅供参考。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Redis的“假事务”与分布式锁

transaction = jedis.multi(); transaction.set("a", "b"); transaction.set("c", "d"); transaction.exec...开始之前先总结无论什么方式的分布式锁,其核心都是如有不存在某个key则写入,存在则返回写入失败。...但是请注意,它仍然存在一个问题,那就是这两个命令并不是原子性的,如果在执行expire redis_lock 5时,redis服务恰好宕机,此时这个key将会一直存在。...获取锁时,通过insert插入一条记录,如果插入成功则获取锁成功;插入失败则获取锁失败。...一听,是不是觉得有点意思,好像确实能通过MySQL来实现分布式锁,这样我们就不必引入redis或ZooKeeper。那为什么我们日常开发中几乎没有人这样用过呢?

69141
  • 我们弃用 Firebase 了

    当然,也有 Firebase 模拟器,但它们很慢,也很难调试,而且普遍存在不足;经常会在负载不是很大的情况下出现意料之外的失败,而你可能期望有一个能够承受足够负载的、健壮的本地环境。...但最近,Cloud Function 部署在达到这个配额后开始悄然失败。...对于这个问题,K-Optional Software 几乎在同一时间收到了多个关于项目(不是我们的项目)的咨询请求,一切都表明,是 API 的突然变化造成了麻烦。...那看起来像是一个名为 dispatcherFunction 的函数,根据 eventName 切换到相应内部函数的调用。...其开发体验令人愉快,特别是行级安全,那与 Firestore 规则类似,但更为强大。Supabase 正基于 Deno 开发他们的无服务器函数套件,这表明他们对优秀的技术很重视。

    32.6K30

    Redis是怎么对缓存下手的

    事务支持 Redis支持原子性操作,可以将多个命令打包成一个事务,在执行时保证所有命令都成功或全部失败。这种支持非常适用于需要进行多个操作的复杂应用程序。...Redis支持原子性操作,可以将多个命令打包成一个事务,同时在执行时保证所有命令都成功或全部失败。这种支持非常适用于需要进行多个操作的复杂应用程序。以下是这种支持的概念和Java代码示例: 1....transaction = jedis.multi(); //执行多个命令 transaction.set("key1", "value1"); transaction.hset...transaction = jedis.multi(); //执行多个命令 transaction.set("key1", "value1"); transaction.hset...(); } } 总之,Redis支持原子性操作,可以将多个命令打包成一个事务,在执行时保证所有命令都成功或全部失败

    8610

    如何用TensorFlow和Swift写个App识别霉霉?

    虽然看着有点麻烦,其实也不是很复杂。 在我详细介绍每个步骤前,有必要解释一些后面会提到的技术名词。...客户端会将照片上传至 Cloud Storage,它会触发一个用 Node.js 提出预测请求的 Firebase 函数,并将结果预测照片和数据保存至 Cloud Storage 和 Firestore...用户选择照片后,会触发程序将照片上传至 Cloud Storage: let firestore = Firestore.firestore()func imagePickerController(_...该函数会取代上面第一个 Swift 脚本中的注释: self.firestore.collection("predicted_images").document(imageName!)...发出预测请求:用 Firebase 函数向 ML Engine 模型在线发起预测请求。从 APP 到 Firebase Storage 的上传会触发 Firebase 函数

    12.1K10

    Flutter 移动端架构实践:Widget-Async-Bloc-Service

    示例: Firestore service 我们可以实现一个FirestoreDatabase的Service作为Firestore的指定域的API包装器。...输入的数据(读取):将来自Firestore文档的键值对的流转换为强类型的不可变数据Model。 数据输出(写入):将数据Model转换为键值对,以便写入Firestore。...登录成功或失败后,我们重新启用所有按钮并恢复标题的内容,我们通过设置loading=false达到该效果。 登录失败时,我们会弹出一个警示的对话框。...仅供参考,在Redux中实现这样的功能…嗯…并不是那么有趣! ——虽然看起来Async-BLoC似乎对BLoC来说只是一个很小的改进,但它们完全不同。...,因为builder只应该返回一个控件,而不是执行任何命令式的代码。

    16.1K20

    05 Pytest参数化处理

    pytest的参数化方式 pytest.fixture()方式进行参数化,fixture装饰的函数可以作为参数传入其他函数 conftest.py 文件中存放参数化函数,可作用于模块内的所有测试用例 pytest.mark.parametrize...()方式进行参数化 本节测试依然以is_leap_year.py方法作为测试目标: def is_leap_year(year): # 先判断year是不是整型 if isinstance...(year, int) is not True: raise TypeError("传入的参数不是整数") elif year == 0: raise ValueError...= year: raise ValueError("传入的参数不是正整数") elif (year % 4 ==0 and year % 100 !...测试用例中传入2个参数,year和期望结果,使输入数据与预期结果对应,构造了2组会失败的数据,在执行结果中,可以看到失败原因: ?

    1.5K50

    es3-es10整理

    尝试将新属性添加到不可扩展对象将静默失败或抛出TypeError(最常见的情况是strict mode (en-US)中,但不排除其他情况)。...尝试删除一个密封对象的属性或者将某个密封对象的属性从数据属性转换成访问器属性,结果会静默失败或抛出TypeError(在严格模式 中最常见的,但不唯一)。 不会影响从原型链上继承的属性。...// 除了属性值以外的任何变化,都会失败. obj.quaxxor = 'the friendly duck'; // 添加属性将会失败 delete obj.foo; // 删除属性将会失败 /...任何修改尝试都会失败,无论是静默地还是通过抛出TypeError异常(最常见但不仅限于strict mode)。...箭头函数表达式更适用于那些本来需要匿名函数的地方,并且它不能用作构造函数

    1.4K20

    2021年11个最佳无代码低代码后端开发利器

    虽然Airtable可能不是一个传统的后端,但它让团队和个人都能自由组织任务。...◆ Cloud Firestore 最适合那些希望快速构建,希望将安全和用户管理委托给后台服务,并能应对一些学习曲线的中间人。 Firebase Firestore是谷歌的一个数据库服务。...定价 Spark计划 (免费):Firestore的总存储数据为1GB Blaze计划(随用随付):总容量为1GB,每多存储1GB的数据在Firestore中加0.108美元。...它还提供了创建自定义函数来查询数据库的能力,而无需编写一行代码。这样一个平台的灵活性和可扩展性使它成为最简单的后端之一,可以开始使用。...它不是一个传统的数据库。它有自己的查询语言,称为FQL。它提供灵活的数据建模,并支持消除数据异常的ACID事务。

    12.6K20

    Flow 操作符 shareIn 和 stateIn 使用须知

    而这不是 SharedFlow 的使用方式。 提升性能 通过共享所有收集者要观察的同一数据流实例 (而不是按需创建同一个数据流的新实例),这些 API 可以为我们提升性能。...不要在每个函数调用时创建新的实例 切勿 在调用某个函数调用返回时,使用 shareIn 或 stateIn 创建新的数据流。...以开源项目——Google I/O 的 Android 应用 iosched 为例,您可以在 源码中 看到,从 Firestore 获取用户事件的数据流是通过 callbackFlow 实现的。...UserRepository( private val userEventsDataSource: FirestoreUserEventDataSource ) { // 新的收集者会在 Firestore...// 由于这一函数依赖一个 `userId`,所以在这个函数中 // 数据流无法通过调用 shareIn 或 stateIn 进行复用. // 这样会导致每次调用函数时,都会创建新的

    4.6K20
    领券