我有一个非常麻烦的时间来弄清楚如何按顺序做出承诺。我正在为Node.js中的DiscordApp制作一个聊天机器人,我在这里搜索了大量的搜索和Google。我尝试过使用Promise.all
和Async函数。他们没有工作,但我觉得我做错了。
目前回到我开始使用我的代码的地方
let emoji = ['1⃣', '2⃣', '3⃣', '4⃣', '5⃣', '6⃣', '7⃣', '8⃣', '9⃣']
msg.channel.send('some message being sent')
.then(sentMessage => {
poll.users[msg.author.id].forEach(function(item, index) {
sentMessage.react(emoji[index])
})
})
这有时会导致对消息的反应(如果不是大多数时候)混淆。正如你所看到的,表情符号是数字,所以我希望它们按顺序排列。由于.react()
是一个承诺,他们随机解决,正如我之前所说,数字表情符号混淆了。如果我想让他们按顺序解决,我怎么能这样做?
我尝试过的事情:Promise.all
msg.channel.send('some message being sent')
.then(sentMessage => {
foo(poll, msg, sentMessage, index)
})
async function foo(poll, msg, embedded, voteCount) {
return await Promise.all(poll.users[msg.author.id].map(() => {
embedded.react(nums[voteCount])
}))
}
答案 0 :(得分:4)
Maybe you want to try this:
msg.channel.send('some message being sent')
.then(sentMessage => {
const result = poll.users[msg.author.id].reduce((p, c, i) => p.then(() => sentMessage.react(emoji[i])), Promise.resolve());
result.then(() => {
console.log('all emojis shall be sent in order');
});
})