我的 Grails 4.0.10 应用程序需要调用外部服务。调用可能需要长达 3 分钟,所以它必须是异步的。在阅读了文档后,我编写了一个非阻塞服务方法来使用 Promise 执行调用而没有太多麻烦。
该文档描述了如何显示异步结果。
就我而言,结果会影响数据库。我必须创建新的域对象,修改现有的域对象并将结果保存在onComplete
闭包中。doco 对如何做到这一点相当安静。
onComplete
这些是我对关闭的假设。我的问题是:这些假设是否有效?这是正确的方法吗?
- 没有注入的东西可用,既不是服务也不是(例如)
log
——你通常期望在服务中的东西 - 如果使用多租户,则必须首先将数据库逻辑包含在
Tenants.withId
其中,然后再将其包含在withTransaction
withTransaction
以域名为前缀。但是,其他域可以在同一个闭包中自由操作和持久化- 在异步调用之前拾取的域实例可以像这样附加到当前会话
instance.attach()
,然后修改并保存 - 如果需要记录,请创建一个新的日志实例