【问题标题】:Execute Several database queries (promises) sequentially顺序执行几个数据库查询(承诺)
【发布时间】:2020-06-16 03:39:55
【问题描述】:

数据库查询本身不是问题 - 它们工作正常。

问题是,我需要依次执行所有这些:

DELETE FROM myTable;
INSERT INTO myTable(c1, c2, c3) VALUES (x, y, z);
SELECT * FROM myTable;

无论我尝试什么,我都不知道如何在 Node 中做到这一点。 This question 似乎是流量最多的解决方案,它会让我做这样的事情(其中clientfrom pg 并且应该返回承诺):

// client is my database client, has already been initialized
// f is an object corresponding to my database
var res;
Promise.resolve()
      .then(() => {
          console.log("Deleting");
          return client.query("DELETE FROM FileFormat");
      })
      .then(() => {
        console.log("Inserting");
        return client.query("INSERT INTO myTable(c1, c2, c3) VALUES ($1, $2, $3)", [f.x, f.y, f.z]);
      })
      .then(() => {
        console.log("Selecting");
        return client.query("SELECT * FROM FileFormat").then((err, result) => res = result.rows)
      })
      .then(() => {
        console.log("Finished");
        console.log(res);
      })

我希望它打印Deleting,然后是Inserting,然后是Selecting,然后是Finished,然后是我刚刚插入数据库的数据。

相反,它打印Deleting,然后什么也不做。

我不想无限地链接client.query.then(client.query.then(...)),因为这会使我的代码任意缩进。我宁愿让我的代码尽可能平坦,并按顺序执行这些调用,等待每个调用完成后再开始下一个调用。我该怎么做?

【问题讨论】:

  • 根据文档,它应该像您使用它一样工作。但是,您可能遇到了错误。添加catch((err) => console.error(err)) 看看有什么弹出。
  • @JorgeArmandoPalm 感谢您的建议。我尝试在每个.then()s 之间放置一个.catch(err => console.error(err))。没有任何变化。
  • client.query().then(client.query).then()链接是否有效?客户端可能实际上并没有解决会导致这种行为的承诺。如果您删除所有 client.query,您将看到所有日志都将按照您的预期显示。您的 Javascript 代码已经在执行您想要的操作,问题似乎出在 PG 客户端上。
  • 这个问题发生在节点吗?
  • @JorgeArmandoPalm 原来你是对的,我没有正确初始化连接,它只是挂起并静默退出,无论出于何种原因,都没有引发错误。它现在可以工作了,除了最后无限期地挂起。但这也是初始化(/终结)的事情。

标签: javascript node.js typescript promise database-connection


【解决方案1】:

我的 cmets 对原始问题的回答

客户端可能实际上并没有解决会导致这种行为的承诺。如果您删除所有 client.query,您将看到所有日志都将按照您的预期显示。您的 Javascript 代码已经在执行您想要的操作,问题似乎出在 PG 客户端上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    相关资源
    最近更新 更多