数据库查询本身不是问题,它们可以正常工作。
问题是,我需要依次执行所有这些操作:
DELETE FROM myTable;
INSERT INTO myTable(c1, c2, c3) VALUES (x, y, z);
SELECT * FROM myTable;
而且无论如何尝试,我都不知道如何在Node中执行此操作。 This question似乎是交易量最大的解决方案,它会让我做类似的事情(其中client
是from 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
,因为这会使我的代码任意缩进。我宁愿保持代码尽可能平坦,并顺序执行这些调用,等待每个调用完成后再开始下一个调用。我该怎么办?
客户可能未真正履行可能导致此行为的承诺。如果删除所有client.query,您将看到所有日志将按预期显示。您的Javascript代码已经在执行您想要的操作,而问题似乎出在PG客户端上。