向数组push异步数据库返回值时如何正确使用await?
问题原因
db.get()是异步API,调用后不会立即返回查询结果,而是返回一个Promise对象,你直接将该对象推入数组,输出时自然就显示为[object Promise]。
修复方案
你需要先收集所有用户的数据库查询Promise,再通过Promise.all等待所有异步查询执行完成,拿到全部实际存储值后再输出,修改后代码如下:
fetchMsg.reactions.cache.map(async (reaction) => { // 过滤非👍的反应 if (reaction.emoji.name !== ":thumbsup:") return; // 获取所有点👍的用户 const reactedUsers = await reaction.users.fetch(); // 收集所有数据库查询的Promise实例 const queryPromises = reactedUsers.map(user => db.get(user.id)); // 等待所有查询完成,获取最终结果数组 const usersThatReacted = await Promise.all(queryPromises); // 若需要过滤数据库中无匹配记录的空值,可取消注释下一行代码 // const usersThatReacted = (await Promise.all(queryPromises)).filter(Boolean); message.channel.send(usersThatReacted); });
内容的提问来源于stack exchange,提问作者Dimooon
相关产品推荐
相关产品推荐

