首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用massive.js执行事务

如何使用massive.js执行事务
EN

Stack Overflow用户
提问于 2017-08-08 23:02:34
回答 1查看 544关注 0票数 0

我正在尝试实现一件非常简单的事情:

代码语言:javascript
运行
复制
START TRANSACTION;
DELETE FROM table WHERE id = 1;
ROLLBACK;

postgres数据库上运行它可以完美地工作。对于massive.js,它不会:

代码语言:javascript
运行
复制
this.db.run(
   "START TRANSACTION",
   []
); 
setTimeout(() => {
   this.db.run(
       "DELETE FROM table WHERE id = $1"
       [1]
   );
}, 2000);
setTimeout(() => {
   this.db.run(
       "ROLLBACK;"
       []
   );
}, 4000);

它不会回滚更改,只是从数据库中删除。COMMIT不能很好地工作。怎么了?

有什么方法可以转储查询顺序吗?

EN

回答 1

Stack Overflow用户

发布于 2017-08-16 12:19:21

Massive在底层使用pg-promise,这反过来又支持事务:

代码语言:javascript
运行
复制
db.instance.tx(t => {
    // BEGIN has been executed
    return t.none('DELETE FROM table WHERE id = $1', [123])
        .then(() => {
            // Records have been deleted within the transaction

            throw new Error('Random error to fail the transaction');
            // = the same as returning Promise.reject(new Error('Random...'))
        });
})
    .catch(error => {
        // ROLLBACK has been executed, no records end up deleted.
        console.log(error);
    });

另请参阅:

有什么方法可以转储查询顺序吗?

Monitoring Queries向您展示了如何执行此操作,或者您可以在初始化db.driverConfig时在massive对象中添加事件query处理程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45571874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档