首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用pg-promise锁表

如何使用pg-promise锁表
EN

Stack Overflow用户
提问于 2017-12-26 22:51:52
回答 1查看 374关注 0票数 0

我有过

代码语言:javascript
复制
db.result('DELETE FROM categories WHERE id = ${id}', category).then(function (data) { ...

代码语言:javascript
复制
db.many('SELECT * FROM categories').then(function (data) { ...

最初从一个API调用中调用delete,然后在随后的API调用中调用select,但db请求的回调是以相反的顺序发生的,因此我得到了删除类别的类别列表。

有没有办法用pg-promise锁定类别表?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-27 02:14:55

如果您希望SELECT的结果始终反映上一次DELETE的结果,那么有两种方法可供考虑……

标准方法是将操作统一到一个操作中,这样您就可以对同一连接执行所有依赖查询:

代码语言:javascript
复制
db.task(function * (t) {
    yield t.none('DELETE FROM categories WHERE id = ${id}', category);
    return yield t.any('SELECT FROM categories');
})
  .then(data => {
      // data = only the categories that weren't deleted
  });

当然,您也可以使用标准promise语法,甚至可以使用ES7 await/async

第二种方法是在您的服务中组织一个人工锁,该锁将延迟执行任何相应的SELECT,直到DELETE请求全部完成。

然而,这是一个非常笨拙的解决方案,通常指向架构中的缺陷。此外,作为pg-promise的作者,我甚至不会讨论这个解决方案,因为它无论如何都会在我的库之外。

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

https://stackoverflow.com/questions/47980209

复制
相关文章

相似问题

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