我刚接触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");
我的理解是,使用后者的话,在记录删除之前消息将被显示。
更新: 阅读了许多关于promises和callbacks的文章后,我理解pg-promise使用链式调用来处理成功和错误的情况,即.then和.catch。我现在也相信,pg-promise命令应该放在类似以下的函数包装器中:
function initialiseDB() {
db.query("DELETE FROM records")
.then(function (data) {
// success;
})
.catch(function (error) {
// error;
});
}
在我的代码中,我会通过一个简单的命令异步调用这个函数:
initialiseDB();
然而,我仍然不确定异步编程和Promise的概念如何适用于程序的整体结构,因为几乎程序中的所有内容都需要先完成初始化。因此,整个程序不需要放在函数的“.then”部分中吗?也就是说,顶层唯一的代码实际上将是initializeDB()函数?
// 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();