Javascript 如何以字符串形式返回承诺的结果?
我正在尝试为discord平台创建一个bot,它将搜索SQL数据库并将对象返回到聊天室供人们查看 SQL使用承诺,我无法成功地将它返回给我的承诺转换为我可以返回聊天室的内容(字符串或数组) 此代码查询数据库: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
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)非常感谢你的帮助!