如何以字符串形式返回承诺的结果?

fir*_*167 4 javascript sqlite node.js promise discord.js

我正在尝试为不和谐平台创建一个机器人,它将搜索 SQL 数据库并将对象返回到聊天中供人们查看。

SQL 使用承诺,但我无法成功地将它返回的承诺转变为我可以返回到聊天的内容(字符串或数组)。

此代码查询数据库:

function spell(name) {
var spellData = sql.get("SELECT * FROM spells WHERE LOWER(name) = '"+ name.toLowerCase() + "'");
spellData.then( value => {
    console.log(spellData)
    return spellData;
  });

}
Run Code Online (Sandbox Code Playgroud)

桌子:

CREATE TABLE spells (
    `name` VARCHAR(25),
    `casting_time` VARCHAR(95),
    `components` VARCHAR(215),
    `description` VARCHAR(3307),
    `duration` VARCHAR(52),
    `level` INT,
    `range` VARCHAR(28),
    `school` VARCHAR(13)
  );
Run Code Online (Sandbox Code Playgroud)

我使用的是node.js、sqlite 和discord.js。

xan*_*ded 6

如果您想将Promise对象返回给调用者,只需执行以下操作:

function spell(name) {
    return sql.get("SELECT * FROM spells WHERE LOWER(name) = '" + name.toLowerCase() + "'")
}
Run Code Online (Sandbox Code Playgroud)

然后,在您的客户端中:

spell('some_name').then(function(result) { console.log(result); })
Run Code Online (Sandbox Code Playgroud)

或者,如果您喜欢await

let results = await spell('some_name')
console.log(results)
Run Code Online (Sandbox Code Playgroud)

不知道你是否使用它,但“参数化查询”将防止 SQL 注入攻击。您选择的 NPM 包应该具有充分管理的实施。