我正在使用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;
答案 0 :(得分:1)
您可以使用Promises进行此操作。另外,如前所述,您可以使用async/await,它是Promises的语法糖,因此您可以像同步代码一样编写代码。
异步/等待函数总是返回一个Promise,因此在使用它之前,我建议您先查找Promises,然后尝试用它们编写代码。一旦可行,您就可以使用async / await对其进行重写,这样您就可以完全了解您正在使用什么以及它为什么起作用!
答案 1 :(得分:0)
为此,您需要使用async/await
,请参见here
这是示例
async function fun1(req, res){
let response = await request.get('http://localhost:3000');
if (response.err) { console.log('error');}
else { console.log('fetched response');
}