私は node.js と pg-promise が初めてで、同期プログラミングのバックグラウンドから来ており、新しい考え方が必要です。
メイン プログラム ロジックの前にデータベースの初期化を実行するシナリオから始めます。
次の例: 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;
});
私のコードは次のようになりますか:
db.query("DELETE FROM records")
.then(function (data) {
// success;
console.log("This is where all my main logic goes");
})
.catch(function (error) {
// error;
});
または、次のように読みます。
db.query("DELETE FROM records")
.then(function (data) {
// success;
})
.catch(function (error) {
// error;
});
console.log("This is where all my main logic goes");
私の理解では、後者の場合、レコードが削除される前にメッセージが表示されます。
更新: Promise とコールバックに関する多数の記事を読んだ後、pg-promise は成功とエラーの両方のシナリオで .then と .catch のチェーンを使用することを理解しました。また、pg-promise コマンドは、次のような関数ラッパー内に配置する必要があることも理解していると思います。
function initialiseDB() {
db.query("DELETE FROM records")
.then(function (data) {
// success;
})
.catch(function (error) {
// error;
});
}
次に、コード内から、関数を非同期で実行する単純なコマンドで関数を呼び出します。
initialiseDB();
ただし、プログラムのほとんどすべてが最初に初期化を完了する必要があるため、この非同期コーディングとプロミスの概念がプログラムの全体的な構造にどのように適合するかはまだわかりません。したがって、プログラム全体を関数の「.then」セクションに配置する必要はありませんか? つまり、最上位の唯一のコードは事実上 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();