rows.forEach 不是函数
rows.forEach is not a function
我想为我的不和谐用户创建一个排行榜。
这是我的代码:
const Discord = require('discord.js')
const sql = require("sqlite")
sql.open("../score.sqlite")
exports.run = (client, message, args) => {
sql.get("SELECT * FROM scores GROUP BY userId ORDER BY points DESC LIMIT 10")
.then(rows => {
let embed = new Discord.RichEmbed()
.setFooter('Bot')
.setTimestamp()
let userArray = []
let moneyArray = []
rows.forEach(row => {
userArray.push(row.userId)
moneyArray.push(row.points)
})
embed.addField('Name', userArray.join('\n'), true)
embed.addField('Money', moneyArray.join('\n'), true)
message.channel.send({embed})
})
}
我不明白为什么 forEach 没有函数。
假设您正在使用的 sqlite 库是 this Promise-adding wrapper, the documentation 从 sql.get
返回的值的状态:
If the result set is empty, [it] is undefined
, otherwise it is an object containing the values for the first row. The property names correspond to the column names of the result set.
由于您的 rows
参数是一个对象,因此没有 forEach 函数。它还将是一个包含单行值的对象——如果你想从数据库中获取整组行,你应该使用 sql.all
而不是 sql.get
.
这是使用 Object.keys
的样子:
Object.keys(rows).forEach(key => {
userArray.push(rows[key].userId);
moneyArray.push(rows[key].points);
});
我想为我的不和谐用户创建一个排行榜。
这是我的代码:
const Discord = require('discord.js')
const sql = require("sqlite")
sql.open("../score.sqlite")
exports.run = (client, message, args) => {
sql.get("SELECT * FROM scores GROUP BY userId ORDER BY points DESC LIMIT 10")
.then(rows => {
let embed = new Discord.RichEmbed()
.setFooter('Bot')
.setTimestamp()
let userArray = []
let moneyArray = []
rows.forEach(row => {
userArray.push(row.userId)
moneyArray.push(row.points)
})
embed.addField('Name', userArray.join('\n'), true)
embed.addField('Money', moneyArray.join('\n'), true)
message.channel.send({embed})
})
}
我不明白为什么 forEach 没有函数。
假设您正在使用的 sqlite 库是 this Promise-adding wrapper, the documentation 从 sql.get
返回的值的状态:
If the result set is empty, [it] is
undefined
, otherwise it is an object containing the values for the first row. The property names correspond to the column names of the result set.
由于您的 rows
参数是一个对象,因此没有 forEach 函数。它还将是一个包含单行值的对象——如果你想从数据库中获取整组行,你应该使用 sql.all
而不是 sql.get
.
这是使用 Object.keys
的样子:
Object.keys(rows).forEach(key => {
userArray.push(rows[key].userId);
moneyArray.push(rows[key].points);
});