【发布时间】:2017-08-04 20:36:56
【问题描述】:
我想要这样的结果
var rolecheck = ['289773584216358912','281531832938266625'];
仅从数据库中获取,因此我可以将它与另一个具有 ID 的数组进行比较(是的,它应该是一个字符串)
这样做的目的是在执行命令之前检查用户是否具有具有该角色权限的特定角色。所以它需要是一个可以调用的函数。
我从未使用过 NodeJs 异步函数,所以我不知道如何将此 sql 转换为数组:
.then 的内容只是我试图找出它是如何工作的一些代码,所以忽略控制台日志等。注意:日志确实返回正确的角色,但我只需要它们返回它们以使用它们在我的比较功能中。
sql.all("SELECT roleId FROM roles WHERE punish = 'true' and guildId = '"+guildids+"'").then(row => {
if (row) {
var rolecheck = [];
row.forEach(function(row){
rolecheck.push(row.roleId);
});
console.log(rolecheck);
}
});
返回不起作用,所以我需要一个解决方法。
这是我比较它的地方:(只要正确定义了 rolecheck 和 role.id,它就可以正常工作,但事实并非如此。当我对 rolecheck 数组进行硬编码时,它确实有效。
member.forEach(function(role){
if(HasRole(rolecheck, role.id)){
console.log('user has role: '+role.name);
return true;
}
});
【问题讨论】:
-
这是异步的。您不能从
.then处理程序返回,因为在.then触发时,外部函数的上下文不再存在。您必须在.then处理程序内部 进行检查。换句话说,您的代码必须以嵌套方式编写。 -
我害怕那个。 .then 没有替代方案吗?
-
嗯,你真的不必以“嵌套”的方式做事。假设您之前的
.then()返回一个承诺对象,您始终可以链接.then()调用。但这完全取决于这个sql对象是如何实现的。 -
我一直在挖掘一点点,并遇到了回调。你知道吗?
标签: node.js sqlite asynchronous