接收 DiscordJS Promise 对象而不是获取用户昵称的解析
Receiving DiscordJS Promise Object Instead of Resolution For Fetch User Nickname
我正在尝试创建排名 list/leaderboard,但是在尝试映射值时,返回的是承诺对象而不是字符串。我知道使用 fetch 我需要使用 .then() 来处理承诺,但是我不知道如何将已解决的承诺传递给 map 函数中的项目,以便输出正确。
预期输出格式:
LeaderBoard:
<Username> - <# Of Points>
.
.
.
.
.
<Last Username> - <Last # Of Points>
代码:
const buildLeaderBoard = async () => {
const list = await db.collection("Karma").find({}, {upsert: true}).sort({ karma: -1 }).toArray()
mappedlist = list.map(async function(item){
item = await client.users.fetch(`${item.member}`).then((value) =>{
return `${value.nickname} - ${item.karma}`;
});
return item;
}).join(`\n`);
Current Output:
Array.map()
本身不适用于异步函数。您可以改为使用 for 循环:
const buildLeaderBoard = async () => {
const list = await db.collection("Karma")
.find({}, {upsert: true})
.sort({ karma: -1 }).toArray(),
mappedList = [];
for (let i = 0; i < list.length; i++) {
const item = list[i],
value = await client.users.fetch(`${item.member}`)
.then((value) => {
return `${value.nickname} - ${item.karma}`;
});
mappedList.push(value);
}
return mappedList.join("\n");
}
您也可以使用 Promise.all()
:
const buildLeaderBoard = async () => {
const list = await db.collection("Karma")
.find({}, {upsert: true})
.sort({ karma: -1 }).toArray(),
mappedList = list.map(async (item) => {
const data = await client.users.fetch(`${item.member}`)
.then((value) => `${value.nickname} - ${item.karma}`)
return data;
});
return (await Promise.all(mappedList)).join("\n");
}
我正在尝试创建排名 list/leaderboard,但是在尝试映射值时,返回的是承诺对象而不是字符串。我知道使用 fetch 我需要使用 .then() 来处理承诺,但是我不知道如何将已解决的承诺传递给 map 函数中的项目,以便输出正确。
预期输出格式:
LeaderBoard:
<Username> - <# Of Points>
.
.
.
.
.
<Last Username> - <Last # Of Points>
代码:
const buildLeaderBoard = async () => {
const list = await db.collection("Karma").find({}, {upsert: true}).sort({ karma: -1 }).toArray()
mappedlist = list.map(async function(item){
item = await client.users.fetch(`${item.member}`).then((value) =>{
return `${value.nickname} - ${item.karma}`;
});
return item;
}).join(`\n`);
Current Output:
Array.map()
本身不适用于异步函数。您可以改为使用 for 循环:
const buildLeaderBoard = async () => {
const list = await db.collection("Karma")
.find({}, {upsert: true})
.sort({ karma: -1 }).toArray(),
mappedList = [];
for (let i = 0; i < list.length; i++) {
const item = list[i],
value = await client.users.fetch(`${item.member}`)
.then((value) => {
return `${value.nickname} - ${item.karma}`;
});
mappedList.push(value);
}
return mappedList.join("\n");
}
您也可以使用 Promise.all()
:
const buildLeaderBoard = async () => {
const list = await db.collection("Karma")
.find({}, {upsert: true})
.sort({ karma: -1 }).toArray(),
mappedList = list.map(async (item) => {
const data = await client.users.fetch(`${item.member}`)
.then((value) => `${value.nickname} - ${item.karma}`)
return data;
});
return (await Promise.all(mappedList)).join("\n");
}