顺序执行几个数据库查询(承诺)

问题描述 投票:3回答:1

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

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

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

而且无论如何尝试,我都不知道如何在Node中执行此操作。 This question似乎是交易量最大的解决方案,它会让我做类似的事情(其中clientfrom pg,应该返回诺言):

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,因为这会使我的代码任意缩进。我宁愿保持代码尽可能平坦,并顺序执行这些调用,等待每个调用完成后再开始下一个调用。我该怎么办?

javascript node.js typescript promise database-connection
1个回答
0
投票

我的评论对原始问题的答复

客户可能未真正履行可能导致此行为的承诺。如果删除所有client.query,您将看到所有日志将按预期显示。您的Javascript代码已经在执行您想要的操作,而问题似乎出在PG客户端上。

© www.soinside.com 2019 - 2024. All rights reserved.