续集承诺等待postgres触发完成后再解决?

时间:2017-04-19 16:36:38

标签: javascript postgresql triggers promise sequelize.js

我有一个contact postgres表,其中包含contacted_date列。我最近创建了一个contact_date表,用于存储联系人联系的每个日期。

由于代码库经常引用最新contact的{​​{1}}表格,因此我无法将该表格中的所有数据迁移出来。相反,contacted date包含联系给定联系人的每个日期,该表上的触发器会使用每个联系人的最新日期更新contact_date

如果我使用Sequelize对contact进行更改,承诺是否等待触发器成功完成?或者只是等待成功完成对contact_date的更改?

在我的大多数代码中,这并不是一个大问题 - 如果我坚持新的联系日期,那么我的代码已经可以访问该日期,如果需要,我可以在其他计算中使用该日期。但是我的测试遇到了困难,可能是因为竞争条件。在我的测试中,我创建了具有联系日期的新联系人,并且我的一些测试失败了,可能是因为承诺在触发器完成其工作之前就已解决。

更新:{{3}}表示触发器是同一事务的一部分,暗示Sequelize承诺在触发器完成之前无法解决,但如果有人确切知道,我会还是喜欢听到dis / confirm。

1 个答案:

答案 0 :(得分:1)

我希望您使用transactions进行查询,否则我觉得这是不可能的。

此外,实现目标的另一种方法是在续集中使用hooks(基本上是应用程序级别的触发器),而不是在数据库级别创建触发器。
由于您可以将事务对象传递给钩子,因此保证在钩子下执行的操作是导致钩子运行的同一事务的一部分。