繁体   English   中英

Foreach 循环速度太快

[英]Foreach loop goes too fast

这是我正在使用的循环:

client.users.forEach(user => {
    if (user.presence.status == "online") {
        fnHistory.userUpdate(user.id, status, false, message);
    }
});

里面的函数调用这个:

client.channels.get("495635013073895429").fetchMessage("495636761926434818").then(message => {
    message.edit(`${message.content} \n \t - ${name}`);
});

我正在尝试使用新名称附加现有消息。 但是在 foreach 循环之后,它只显示姓氏。

这就是 foreach ['foo', 'bar'] 中 2 个元素的处理方式:

  1. 在 foreach 之前:“当前正在跟踪:”
  2. 第一次迭代:采用“当前跟踪:”并附加“ - foo”
  3. 第二次迭代:采用“Currently tracking:”并将其附加“-bar”。 但它应该需要“当前正在跟踪:-foo”,然后用“-bar”附加它
  4. 完成像“当前跟踪:-栏”

我已经搜索了很多并且已经尝试让每个函数都使用一个 promise,但是 foreach 并不关心这个。 我也尝试使用延迟/超时。 但是没有成功...

这可以通过多种方式实现。 但是在我们开始之前,您需要修改您的处理函数以返回像这样的承诺

 function () {
    return client.channels.get("495635013073895429")
  .fetchMessage("495636761926434818").then(message => {
message.edit(`${message.content} \n \t - ${name}`);
    });
} 

然后,您可以使用reduce或编写async函数来序列化处理。

使用减少:

client.users.reduce((previousIteration, user => {
  if (user.presence.status === "online") {
    return previousIteration.then(() => fnHistory.userUpdate(user.id, status, false, message));
  }
  return previousIteration;
}, Promise.resolve());

使用异步函数:

async function updateOnlineUsers() {
  for (const user of client.users) {
    if (user.presence.status === "online") {
      await fnHistory.userUpdate(user.id, status, false, message));
    }
  } 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM