Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何以字符串形式返回承诺的结果?_Javascript_Node.js_Sqlite_Promise_Discord.js - Fatal编程技术网

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

Javascript 如何以字符串形式返回承诺的结果?,javascript,node.js,sqlite,promise,discord.js,Javascript,Node.js,Sqlite,Promise,Discord.js,我正在尝试为discord平台创建一个bot,它将搜索SQL数据库并将对象返回到聊天室供人们查看 SQL使用承诺,我无法成功地将它返回给我的承诺转换为我可以返回聊天室的内容(字符串或数组) 此代码查询数据库: function spell(name) { var spellData = sql.get("SELECT * FROM spells WHERE LOWER(name) = '"+ name.toLowerCase() + "'"); spell

我正在尝试为discord平台创建一个bot,它将搜索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;
  });

}
下表:

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。

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

function spell(name) {
    return sql.get("SELECT * FROM spells WHERE LOWER(name) = '" + name.toLowerCase() + "'")
}
然后,在您的客户机中:

spell('some_name').then(function(result) { console.log(result); })
或者,如果您正在等待,请执行以下操作:

let results = await spell('some_name')
console.log(results)

不知道您是否正在使用它,但会防范SQL注入攻击。您选择的NPM包应该有一个充分管理的实现。

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

function spell(name) {
    return sql.get("SELECT * FROM spells WHERE LOWER(name) = '" + name.toLowerCase() + "'")
}
然后,在您的客户机中:

spell('some_name').then(function(result) { console.log(result); })
或者,如果您正在等待,请执行以下操作:

let results = await spell('some_name')
console.log(results)

不知道您是否正在使用它,但会防范SQL注入攻击。您选择的NPM包应该有一个充分管理的实现。

看起来您可能误解了承诺的工作原理。即使承诺解决了,它仍然是一个承诺对象。因此,在
然后
回调中,当您调用
console.log(spellData)
时,您只是在记录promise对象。您想要的数据实际上是作为
传递到回调中的,因此工作代码是

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

}

看起来你可能误解了承诺的作用。即使承诺解决了,它仍然是一个承诺对象。因此,在
然后
回调中,当您调用
console.log(spellData)
时,您只是在记录promise对象。您想要的数据实际上是作为
传递到回调中的,因此工作代码是

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

}

首先,使用
值(
.then
的参数),而不是
承诺本身如果这样做,@CertainPerformance-这意味着-
拼写数据。然后(value=>{return value;})-这是多余的。。。尽管如此,
拼写
不会返回任何内容。首先,使用
(参数
.then
),而不是
承诺
本身如果这样做,@CertainPerformance-这意味着-
拼写数据。然后(值=>{return value;})-这是多余的。。。而且,
spell
仍然不会返回thingnote,在这里你可以调用
spell
你可以
等待它(在
sync
函数中)或者使用
。然后
来“访问”所需的值(哎呀,现在你的编辑基本上说明了确切的事情,所以我觉得很愚蠢:p)非常感谢你的帮助!注意,当你调用
拼写时,你可以
等待它(在
同步
函数中)或使用
。然后
来“访问”所需的值(哦,现在你的编辑基本上说明了确切的事情,所以我觉得很愚蠢:p)非常感谢你的帮助!