NodeJS sqlite3 不返回变量(作用域问题)

NodeJS sqlite3 not returning variable (scope problem)

此代码 returns 未定义它应该是来自数据库的数据。它是 class 的一部分,它具有变量 this.database (一个 sqlite3 数据库)。我做错了什么?

    getData(chip_id) {
            let user_name;
            this.database.get("SELECT data FROM chips WHERE id=?",[chip_id],(err,row) => {
                    user_name = row.data;
            });
            return user_name;
    }

从数据库中检索数据是一个异步操作,您应该使用类似 Promise or async function 的方式来处理它。把你的函数改成这个。

getData(chip_id) {
  return new Promise((resolve, reject) => {
    let user_name;
    this.database.get("SELECT data FROM chips WHERE id=?", [chip_id], (err, row) => {
      if(err) {
        reject(err);
      }
      else {
        user_name = row.data;
        resolve(user_name);
      }
    });
  });
}

在客户端:

getData(id)
  .then(username => {
    // the username is ready to use
  })
  .catch(error => {
    // handle the error
  });

阅读这些链接也对您的入门有很大帮助:

Callbacks Vs Promises and basics of JS

Getting to know asynchronous JavaScript: Callbacks, Promises and Async/Await

Converting callbacks to promises