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

时间:2018-08-15 01:10:00

标签: javascript node.js sqlite promise discord.js

我正在尝试为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。

非常感谢您的帮助。

2 个答案:

答案 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 
  });

}