我正在尝试为discord平台创建一个机器人,该机器人将搜索sql数据库并将对象返回到聊天室中,以供人们查看
Sql使用promise,但我一直无法成功地将诺言返回给我,使我返回可以聊天的内容(字符串或数组)
function spell(name) {
var spellData = sql.get("SELECT * FROM spells WHERE LOWER(name) = '"+ name.toLowerCase() + "'");
spellData.then( value => {
console.log(spellData)
return spellData;
});
}
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)
);
我已经尝试了很长时间了,但是还没有任何东西可以工作,这是使用node.js,sqlite和discord.js。
非常感谢您的帮助。
答案 0 :(得分:2)
如果要将Promise
对象返回给调用方,只需执行以下操作:
function spell(name) {
return sql.get("SELECT * FROM spells WHERE LOWER(name) = '" + name.toLowerCase() + "'")
}
然后,在您的客户中:
spell('some_name').then(function(result) { console.log(result); })
或者,如果您要await
访问:
let results = await spell('some_name')
console.log(results)
答案 1 :(得分:1)
似乎您可能误解了诺言如何运作。即使在诺言解决之后,它仍然是诺言的对象。因此,在then
回调中,当您调用console.log(spellData)
时,您只是在记录promise对象。所需的数据实际上以value
的形式传递到回调中,因此工作代码为
function spell(name) {
var spellData = sql.get("SELECT * FROM spells WHERE LOWER(name) = '"+ name.toLowerCase() + "'");
return spellData.then( value => {
console.log(value) //log the returned value
return value; // returning the value from a then function returns a new promise, so the spell function also returns a promise which you can handle similarly
});
}