我正在使用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重写它,因此您知道自己完全了解自己在使用什么以及它为什么起作用!

10-04 22:43
查看更多