javascript - 当我在回调函数中时,有人可以解释我如何访问变量值吗?
问题描述
我有这个函数,只要用户向机器人键入“/play”或“/register”,它就会被调用,它用于查询数据库,如果用户已经在数据库中存储了他的数据。
我试图让这个函数返回真或假,但它不能正常工作..它总是返回假。
希望有人能解释一下为什么,提前谢谢![我为我糟糕的英语道歉]
我尝试将“let res = false”设置为全局变量,并在回调函数中更改其值(这有效,但仅在第一次执行该方法时[不知道为什么,如果有人可以向我解释这个])。
我试图在“isRegistered”函数中初始化变量(如您在下面的代码中所见),但在回调函数中似乎无法访问该变量。
function isRegistered(id){
let res = false;
db.all('SELECT iduser FROM users WHERE iduser = ?', [id], (err, rows) => {
if (err)
console.log(err);
if( rows != null)
res=true;
else res = false;
});
return res;
}
api.on('message', function(message) {
var chat_id = message.chat.id;
var text = message.text;
switch(text){
case '/register':
if (isRegistered(chat_id)){
api.sendMessage({
chat_id: message.chat.id,
text: 'You are already registered.'
});
}else{
insertRow(chat_id);
api.sendMessage({
chat_id: message.chat.id,
text: 'Now you are registered.'
});
}break;
....
....
}
}
我期待回调函数改变“res”变量的值。
我尝试了下面的代码,这是使它工作的唯一方法。我不明白为什么......我很绝望
function isRegistered(id){
let res = false;
db.all('SELECT iduser FROM users WHERE iduser = ?', [id],(err, rows ) => {
if (err){
console.log(err);
}
rows.forEach( (row) => {
if(id == row.iduser) {
res = true;
}
});
});
return res;
}
解决方案
推荐阅读
- azure - 私有链接支持的存储和源 ip
- javascript - 使用 Next Js 加载页面样式需要时间
- python - 如何使用多个引导服务器创建 python kafka 生产者?
- php - 更新 PHP 后,仅在 Wordpress 管理面板上出现太多重定向错误
- jquery - CSS 还是 jQuery?如何根据具有灵活大小的容器获得圆形?
- javascript - 拦截 XHR 请求并 console.log 请求标头及其值
- node.js - NPM - 无法替换配置中的 env:${NPM_BASE64_USERNAME_PASSWORD}
- svelte - 如何避免在 Svelte 中初始加载后显示加载状态?
- python - 如何使用边框像素列表获取内部像素列表?
- c# - 优化咨询服务