代码之家  ›  专栏  ›  技术社区  ›  RiesvGeffen

Foreach循环太快

  •  -1
  • RiesvGeffen  · 技术社区  · 6 年前

    这是我正在处理的循环:

    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循环之后,它只显示姓氏。

    1. foreach前:“当前跟踪:”
    2. 但应该是“currentlaying:-foo”,然后加上“-bar”

    但是没有成功。。。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Aluan Haddad Vikrant Kashyap    6 年前

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

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

    reduce 或者写一封信 async 功能。

    使用reduce:

    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));
        }
      } 
    }