【问题标题】:NodeJS sqlite3 not returning variable (scope problem)NodeJS sqlite3 不返回变量(范围问题)
【发布时间】:2020-07-24 03:09:46
【问题描述】:

当它应该是来自数据库的数据时,此代码返回未定义。它是具有变量 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;
    }

【问题讨论】:

标签: node.js scope


【解决方案1】:

从数据库中检索数据是一个异步操作,您应该使用Promiseasync 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 2013-12-22
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    相关资源
    最近更新 更多