最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

如何使用pg

IT培训 admin 2浏览 0评论

如何使用pg

我有

db.result('DELETE FROM categories WHERE id = ${id}', category).then(function (data) { ...

db.many('SELECT * FROM categories').then(function (data) { ...

最初删除是从一个API调用调用,然后在以下API调用上选择,但db请求的回调以相反的顺序发生,因此我获得了已删除类别的类别列表。

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

回答如下:

如果你想要SELECT的结果总是反映以前的DELETE的结果,那么你有两种方法可以考虑......

标准方法是将操作统一为一个,因此您最终会针对同一连接执行所有相关查询:

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的作者,我甚至不会进入该解决方案,因为它无论如何都会超出我的库。

如何使用pg

我有

db.result('DELETE FROM categories WHERE id = ${id}', category).then(function (data) { ...

db.many('SELECT * FROM categories').then(function (data) { ...

最初删除是从一个API调用调用,然后在以下API调用上选择,但db请求的回调以相反的顺序发生,因此我获得了已删除类别的类别列表。

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

回答如下:

如果你想要SELECT的结果总是反映以前的DELETE的结果,那么你有两种方法可以考虑......

标准方法是将操作统一为一个,因此您最终会针对同一连接执行所有相关查询:

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的作者,我甚至不会进入该解决方案,因为它无论如何都会超出我的库。

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论