Сами запросы к базе данных не являются проблемой - они работают нормально.
Проблема в том, что мне нужно выполнить все из них последовательно:
DELETE FROM myTable;
INSERT INTO myTable(c1, c2, c3) VALUES (x, y, z);
SELECT * FROM myTable;
И я не могу понять о том, как это сделать в Node, независимо от того, что я пытаюсь. Этот вопрос представляется наиболее популярным решением, и он заставил бы меня сделать что-то подобное (где client
равно из 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(...))
, потому что это делает мой код произвольно растянутым с большим отступом. Я бы предпочел, чтобы мой код был как можно более плоским, и выполнял бы эти вызовы последовательно, ожидая, пока каждый завершит работу sh, прежде чем начинать следующий. Как мне это сделать?