Ich bin neu bei node.js und pg-Versprechen kommt aus einer Synchronis-Programmierung Hintergrund erfordert ein neues Denken.synchrone Programmierung mit pg-Versprechen
Ich würde mit einem Szenario der Datenbankinitialisierung vor der Hauptprogrammlogik beginnen.
Nach diesem Beispiel: https://github.com/vitaly-t/pg-promise/wiki/Learn-by-Example#simple-select
db.any("select * from users where active=$1", [true])
.then(function (data) {
// success;
})
.catch(function (error) {
// error;
});
Würde mein Code entweder als lesen:
db.query("DELETE FROM records")
.then(function (data) {
// success;
console.log("This is where all my main logic goes");
})
.catch(function (error) {
// error;
});
Oder wäre es lesen als:
db.query("DELETE FROM records")
.then(function (data) {
// success;
})
.catch(function (error) {
// error;
});
console.log("This is where all my main logic goes");
Mein Verständnis ist, mit der das Letzteres würde die Nachricht anzeigen, bevor die Datensätze gelöscht wurden ed.
Update: Nach der Lektüre zahlreicher Artikel über Versprechungen und Rückrufe Ich verstehe, dass pg-Versprechen .then sein verwendet Verkettungs und .catch für beide Erfolg und Fehlerszenarien. Ich glaube auch, jetzt habe ich die pg-Versprechen Befehl verstehen sollte innerhalb einer Funktion Wrapper gestellt werden wie:
function initialiseDB() {
db.query("DELETE FROM records")
.then(function (data) {
// success;
})
.catch(function (error) {
// error;
});
}
Dann aus meinem Code würde ich die Funktion mit einem einfachen Befehl aufrufen, die die Funktion asynchron laufen würde:
Ich bin mir aber immer noch nicht sicher, wie dieses Konzept der asynchronen Codierung und Versprechen in die Gesamtstruktur eines Programms passt, da sicherlich fast alles in einem Programm die Initialisierung als erste abgeschlossen hätte. Sollte das gesamte Programm nicht in den ".then" -Abschnitt der Funktion gestellt werden? d. h. der einzige Code auf der obersten Ebene wäre effektiv die Funktion intialiseDB()?
// Start of code here
var pgp = require('pg-promise')();
//Configure the database connection
var config = {
user: 'username', //env var: PGUSER
database: 'database', //env var: PGDATABASE
password: 'password', //env var: PGPASSWORD
};
var db = pgp(config);
function initialiseDB() {
db.query("DELETE FROM records")
.then(function (data) {
// This is where the main program logic goes after this line;
})
.catch(function (error) {
// error;
});
}
// Commence the program here
initialiseDB();
Es ist der erste. Und Sie sollten über die richtige Verwendung von Versprechen lesen, es gibt heute viele Informationen darüber, beginnend mit [PromiseJS] (https://www.promisejs.org/). –
Danke dir, alles neu für mich. "Schon früh experimentierte der Knoten mit einer Funktion namens" Versprechungen ", die eine Reihe von Funktionen hinzufügte, um asynchronen Code linearer erscheinen zu lassen. Er wurde aus verschiedenen Gründen aus dem Knoten entfernt:" https://github.com/maxogden/art -of-node/blob/master/readme.md – Dercni
Das ist ein schlechter Artikel, um überhaupt einen solchen Unsinn vorzuschlagen. Versprechen ist der beste Weg, um heute asynchronen Code zu schreiben. –