我正在使用NodeJs服务器,正在实现Sqlite3
数据库。
我的问题是“ saveMddToDb”方法在“ createMddTables”方法完成之前开始。
所以我想知道如何等到第一个开始之后再开始第二个。
const db = require('./db.js');
const myDb = new db(configServer.dataBase.useDatabase === true ? configServer.dataBase.name : null);
myDb.createMddTables();
myDb.saveMddToDb(dataModel);
class Db {
constructor(name) {
this.db = new sqlite3.Database(name === null ? ':memory:' : name, err => {
if (err) {
return console.error(err.message);
}
console.log(colors.yellow(`Connected to the ${name === null ? 'memory' : name} SQlite database`));
});
}
close() {
this.db.close(err => {
if (err) {
return console.error(err.message);
}
console.log(colors.yellow('Close the database connection'));
});
};
createMddTables() {
this.createTableContacts();
};
createTableContacts() {
const sql = `CREATE TABLE IF NOT EXISTS contacts (
id TEXT PRIMARY KEY,
firstName TEXT NOT NULL,
lastName TEXT NOT NULL,
nickName TEXT NOT NULL,
profilePicture BLOB)`;
this.db.run(sql, err => {
if (err) {
return console.log(err.message);
}
console.log(colors.yellow('Table contacts created'));
});
};
saveMddToDb(mddJson) {
if(mddJson) {
const sqlContacts = `INSERT OR IGNORE INTO contacts VALUES (?, ?, ?, ?, ?)`;
mddJson.contacts.forEach(contact => {
this.db.run(sqlContacts, [uuidv4(), contact.firstName, contact.lastName, contact.lastName, contact.profilePicture], err => {
if (err) {
return console.log(err.message);
}
console.log(colors.yellow('Contacts added to database'));
});
});
}
}
};
module.exports = Db;
最佳答案
您可以使用Promises进行此操作。另外,如前所述,您可以使用async/await,它是Promises的语法糖,因此您可以像同步代码一样编写代码。
async / await函数始终返回Promise,因此在使用它之前,我建议您先查找Promises,然后尝试用它们编写代码。一旦可行,您就可以使用async / await重写它,因此您知道自己完全了解自己在使用什么以及它为什么起作用!