То, что происходит, это ваш асин c forEach работает одновременно, ожидание в функции обратного вызова не останавливает l oop от перехода к следующей итерации. Вы можете даже увидеть немного разные результаты при каждом запуске. Регистрация имени Emoji идет довольно быстро, так что сначала он заканчивается в каждой итерации, а затем ожидает fetchUsers, в результате чего сначала да и нет.
Возможное решение - переместить вашу строку users = await H.fetchUsers();
до В верхней части кода l oop он даже не начнет выводить, пока не получит всю необходимую информацию. Вы также должны знать, что Collection.forEach не возвращает обещание, и поэтому ждать вашего users.forEach
не нужно.
Однако это не гарантия заказа, поскольку список «Нет» может выводиться раньше, чем список «Да». Одним из способов гарантировать порядок будет полное удаление l oop и обработка каждого смайлика в коде после ожидания предыдущего. В качестве альтернативы вы можете получить пользователей в одном l oop, сохранить их в постоянной коллекции во время ожидания с Promise.all , а затем вывести их во втором l oop, повторяя сохраненные сохраненные имена.
message.channel.fetchMessage(messageid).then(r => {
let reactions = r.reactions.array();
let promises = [];
reactions.forEach(re => {
promises.push(re.fetchUsers());
}
let users = await Promise.all(promises);
for(let i = 0; i = reactions.length; i++)
{
console.log(choices[reactions[i].emoji.name]);
users[i].forEach(u => console.log(u));
}
});