2

我有一个数据存储事务,我在其中创建一个实体(用户),让数据存储为我生成 ID。

然后我想使用该 ID,以便我可以创建另一个实体(另一种)。

虽然使用常规数据存储“保存”api 可以做到这一点:

datastore.save(user).then(() => {
  userId = user.key.id // returns entity's ID created by datastore
})

但是,在使用事务时这似乎是不可能的:

transaction.save(user).then(() => {
  console.log( user.key.id )
})

上面的输出“无法读取未定义的'then'”,即使文档中没有列出回调,我还是尝试了。

使用事务创建/保存实体时,如何检索该实体的自动生成 ID?

4

1 回答 1

3

分配 ID

您可以在进入交易之前使用Method: projects.allocateIds :

为给定键分配 ID,这对于在插入实体之前引用它很有用。

使用 Python 客户端库

这将使数据存储区“保留”ID(即使仍然不会使用这些 ID 创建任何实体)并在插入之前避免 ID 冲突。

在您的交易中,您从分配的那些中获得一个 ID 并分配给第一个实体。然后,您可以在第二个实体中引用相同的 ID,甚至在事务提交第一个实体插入之前。

交易的最佳实践

事务的最长持续时间为 60 秒,30 秒后有 10 秒的空闲到期时间。

因此,最佳做法是在输入交易之前执行所有可能的操作。当然,分配 ID 是您可以在事务之前运行的事情之一。

于 2017-04-13T13:21:15.000 回答