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
此代码 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