如何将承诺的结果 return 作为字符串?
How to return result of a promise as a string?
我正在尝试为 Discord 平台创建一个机器人,它将搜索 SQL 数据库和 return 聊天对象以供人们查看。
SQL 使用 promises,但我一直无法成功地将它 return 将我变成我可以 return 聊天的东西(字符串或数组)。
此代码查询数据库:
function spell(name) {
var spellData = sql.get("SELECT * FROM spells WHERE LOWER(name) = '"+ name.toLowerCase() + "'");
spellData.then( value => {
console.log(spellData)
return spellData;
});
}
table:
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。
如果您想 return 将 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
ing:
let results = await spell('some_name')
console.log(results)
不知道您是否正在使用它,但 "parameterized queries" 将防止 SQL 注入攻击。您选择的 NPM 包应该有一个充分管理的实现。
看来您可能误解了 promise 的工作原理。即使在 promise resolve 之后,它仍然是一个 promise 对象。因此,在您的 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
});
}
我正在尝试为 Discord 平台创建一个机器人,它将搜索 SQL 数据库和 return 聊天对象以供人们查看。
SQL 使用 promises,但我一直无法成功地将它 return 将我变成我可以 return 聊天的东西(字符串或数组)。
此代码查询数据库:
function spell(name) {
var spellData = sql.get("SELECT * FROM spells WHERE LOWER(name) = '"+ name.toLowerCase() + "'");
spellData.then( value => {
console.log(spellData)
return spellData;
});
}
table:
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。
如果您想 return 将 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
ing:
let results = await spell('some_name')
console.log(results)
不知道您是否正在使用它,但 "parameterized queries" 将防止 SQL 注入攻击。您选择的 NPM 包应该有一个充分管理的实现。
看来您可能误解了 promise 的工作原理。即使在 promise resolve 之后,它仍然是一个 promise 对象。因此,在您的 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
});
}