sqlite3 Nodejs从表中获取值

nol*_*ags 4 sqlite node.js

我的 db.js 中有 getName 函数

function getName(uid){
    db.all("SELECT name FROM table WHERE uid = ? ",  function (err){
        if(err){
            console.log(err);
        }else{
            console.log(this);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我想获取名称并将其保存到另一个文件中的 var name 。

var uid = req.session.user; 

var name = db.getName(uid);
      console.log(name);
Run Code Online (Sandbox Code Playgroud)

db 函数 getname 有什么问题为什么我会得到未定义的结果?如果你能帮助我那就太好了!

Him*_*wal 5

从异步函数返回数据可能会返回未定义,因为执行返回语句时数据库请求可能尚未完成。

function getName(uid, callback){
  var query = "SELECT name FROM table WHERE uid = " + uid;
  var name = null;
  db.all(query, function (err, rows) {
    if(err){
        console.log(err);
    }else{
      name = rows[0].name;
    }
  });
  return name; <--- this can be execute before db.all() if executed therefore returning null. This is because javascript runs asynchronously.
}
Run Code Online (Sandbox Code Playgroud)

数据库查询的结果需要在回调中传递,或者可以保存在全局变量中。

function getName(uid, callback){
  var query = "SELECT name FROM table WHERE uid = " + uid;
  db.all(query, function (err, rows) {
    if(err){
        console.log(err);
    }else{
        callback(rows[0].name);
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

为了从另一个文件执行:

function print(name) {
  console.log(name);
}
var uid = req.session.user;
getName(uid, print);
Run Code Online (Sandbox Code Playgroud)