我有一个数据存储区事务,我在其中创建一个实体(用户),让数据存储区为我生成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 )
})
以上输出"无法读取'然后'未定义的'", 即使docs中没有列出回调,我还是试过了。
使用交易创建/保存实体时,如何检索该实体的自动生成ID?
答案 0 :(得分:2)
您可以在输入交易前使用Method: projects.allocateIds:
为给定键分配ID,这对于在插入实体之前引用该实体非常有用。
Using the Python client library
这将使数据存储'保留' ID(即使仍然不会成为使用这些ID创建的任何实体)并在插入之前避免ID冲突。
在您的交易中,您从分配的ID中获取一个ID并分配给第一个实体。然后,即使在事务提交第一个实体插入之前,您也可以在第二个实体中引用相同的ID。
事务的最长持续时间为60秒,30秒后的空闲到期时间为10秒。
因此,最佳做法是在输入交易之前执行所有可能的操作。当然,分配ID是您在交易之前可以运行的事情之一。