我正在尝试制作一种民意测验程序,以计算对消息的反应。该漫游器会发送一条消息,并对它做出反应,并计算对该消息的反应。
当我使用awaitReactions
时,then
中没有处理反应。
代码如下:
channel.send(mess)
.then(async m => {
await m.react(ok);
await m.react(ko);
await m.react(maybe);
m.awaitReactions((r, u) => { console.log(`filter:${u.username}`); return true; }, {max: 100000})
.then(collected => {
console.log("Reacted");
collected.forEach(c => { console.log(c); });
})
.catch(collected => {
console.log("Catch");
});
});
对生成的消息作出反应时,仅打印的console.log
是过滤器功能中的消息。
为什么console.log
或then
中的catch
没有执行?
编辑:在awaitRections
的函数参数中添加return。添加退货并不能解决问题。
答案 0 :(得分:0)
当您等待反应时,当到达选项对象中传递的参数之一(如时间已到或达到反应的最大值)时,将解决承诺。如果未达到任何参数,则无法解决承诺。就您而言,您最多只能给出反应(100000),而这永远不会达到。
例如,要等待30秒才能获得投票结果,您可以执行以下操作:
m.awaitReactions((r, u) => { console.log(`filter:${u.username}`); return true; }, { time: 30000 })
.then(collected => {
console.log("Collector ended");
// Collected is a collection with all the reactions collected
console.log(collected);
})
.catch(collected => {
console.log("No reaction collected");
});
如果您想执行示例中的操作,当某人做出反应时,console.log为“ Reacted”,则需要使用MessageCollector而不是message.awaitReactions。您可以这样做:
let collector = message.createReactionCollector((r, u) => { console.log(`filter:${u.username}`); return true; });
collector.on("collect", (reaction, user) => {
console.log("Reacted");
});