不等待带有异步过滤器的 await message.awaitReaction

Posted

技术标签:

【中文标题】不等待带有异步过滤器的 await message.awaitReaction【英文标题】:await message.awaitReaction with an async filter isn't awaited 【发布时间】:2019-09-17 11:52:31 【问题描述】:

为什么我的控制台在“开始”之前记录“完成”? 为什么我不能等待 message.awaitReactions(); ?

const filter = async /*It is here for no reason but without it does not work neither*/ (reaction, user) => 
  if (user.id == players[p].user.id && aEmojis.indexOf(reaction.emoji.name) != -1) 
     console.log("Started");
     attackedIndex = aEmojis[aEmojis.indexOf(reaction.emoji.name)+1];
     message.delete();
     return true;
  
  return false;
;


await message.awaitReactions(filter, max: 1);
console.log("Finished");

【问题讨论】:

你的 awaitReactions 必须返回一个承诺。过滤器的异步没有意义。 async 函数中没有 await == 代码异味。 我也试过没有等待 【参考方案1】:

await 在异步函数中工作

  (async function() 
  const filter = async (reaction, user) => 
  if (user.id == players[p].user.id && aEmojis.indexOf(reaction.emoji.name) != -1) 
     console.log("Started");
     attackedIndex = aEmojis[aEmojis.indexOf(reaction.emoji.name)+1];
     message.delete();
     return true;
  
  return false;
  ;


  await message.awaitReactions(filter, max: 1);
  console.log("Finished");
  )();

【讨论】:

感谢您的帮助,我现在尝试了它仍然无法正常工作,我将继续调查看起来我的情况很奇怪

以上是关于不等待带有异步过滤器的 await message.awaitReaction的主要内容,如果未能解决你的问题,请参考以下文章

discord.js bot await 仅在异步函数中有效

如何在没有等待的情况下调用异步函数?

不使用异步等待的异步等待

带有异步等待的节点 repl

异步杂记

异步/等待清晰度,带有睡眠示例