接收 DiscordJS Promise 对象而不是获取用户昵称的解析
Posted
技术标签:
【中文标题】接收 DiscordJS Promise 对象而不是获取用户昵称的解析【英文标题】:Receiving DiscordJS Promise Object Instead of Resolution For Fetch User Nickname 【发布时间】:2021-10-25 00:56:15 【问题描述】:我正在尝试创建排名列表/排行榜,但是在尝试映射值时,会返回一个承诺对象而不是字符串。我知道使用 fetch 我需要使用 .then() 来处理 promise,但是我不知道如何将解析的 promise 传递给 map 函数中的 item,以便输出正确。
预期输出格式:
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:
【问题讨论】:
【参考方案1】: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");
【讨论】:
非常感谢,帮了大忙 :)以上是关于接收 DiscordJS Promise 对象而不是获取用户昵称的解析的主要内容,如果未能解决你的问题,请参考以下文章
如何从对象的`get()`获取异步数据而不返回Promise