Javascript 我如何通过nodejs将值传递给另一个函数?
所以,我试图用discord js和sqlite3做一件事,但在过去的几个小时里,我一直在讨论这个问题,我仍然不知道如何解决它Javascript 我如何通过nodejs将值传递给另一个函数?,javascript,node.js,sqlite,Javascript,Node.js,Sqlite,所以,我试图用discord js和sqlite3做一件事,但在过去的几个小时里,我一直在讨论这个问题,我仍然不知道如何解决它 client.countDB = function(discordID) { const arr = []; db.each(`SELECT count(DiscordID) FROM verification WHERE DiscordID = ${discordID}`, function(err, row){ if(err){con
client.countDB = function(discordID) {
const arr = [];
db.each(`SELECT count(DiscordID) FROM verification WHERE DiscordID = ${discordID}`, function(err, row){
if(err){console.log(err); return 0;}
arr.push(Object.values(row))
return arr;
})
return arr[0];
};
因此,我试图获取仅在db中可用的数据。每个中都有,但我不知道如何传递它,以便返回预期值。我已经尝试过使用全局变量,把它放在一个更大的范围内,但我仍然不知道怎么做
对不起,如果我弄糊涂了,我不习惯一直问问题
编辑:应该说我正在使用该模块 将代码包装在函数中以使其同步
若查询中有数据,最简单的方法就是使用promise
client.countDB = function(discordID) {
return new Promise((resolve, reject) => {
db.each(`SELECT count(DiscordID) FROM verification WHERE DiscordID = ${discordID}`, function(err, row){
//if you want to throw as an error, reject promise with the incoming error as "reject(err)"
if(err){console.log(err); return resolve(0);}
arr.push(Object.values(row))
return resolve(arr[0]);
})
})};
// You can use this as
client.countDB('someId')
.then(data => console.log(data))
.catch(err => console.log(err));
您是否获得了arr[0]的undefined
值?这显然不起作用,因为return
语句将在db的回调之前触发。每个都将执行。我不熟悉sqlite3,但必须有一种方法通过开箱即用的承诺获得db.each的结果。如果不是的话,你必须自己承诺。是的,正是我所想的,使用async wait
,他们在他们的github中提到它确实是异步的。它可能是异步的,但它在这里或在中没有提到它返回承诺,也没有提到如果没有通过回调,它将返回承诺(这通常是此类库的情况)@shubhamjha很抱歉延迟回复,但是的,我得到了一个未定义的值感谢回复,但在我运行它时它是未定义的。感谢您的帮助,但这不起作用,因为我需要的功能是在client.countDB中
client.countDB = function(discordID) {
return new Promise((resolve, reject) => {
db.each(`SELECT count(DiscordID) FROM verification WHERE DiscordID = ${discordID}`, function(err, row){
//if you want to throw as an error, reject promise with the incoming error as "reject(err)"
if(err){console.log(err); return resolve(0);}
arr.push(Object.values(row))
return resolve(arr[0]);
})
})};
// You can use this as
client.countDB('someId')
.then(data => console.log(data))
.catch(err => console.log(err));