Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Foreach循环速度太快_Javascript_Node.js_Discord.js - Fatal编程技术网

Javascript Foreach循环速度太快

Javascript Foreach循环速度太快,javascript,node.js,discord.js,Javascript,Node.js,Discord.js,这是我正在使用的循环: client.users.forEach(user => { if (user.presence.status == "online") { fnHistory.userUpdate(user.id, status, false, message); } }); 其中的函数调用: client.channels.get("495635013073895429").fetchMessage("495636761926434818").

这是我正在使用的循环:

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个元素就是这样处理的:

  • foreach之前:“当前跟踪:”
  • 第一次迭代:获取“当前跟踪:”并将其附加“-foo”
  • 第二次迭代:获取“当前跟踪:”并将其附加“-bar”。(但它应该使用“当前跟踪:-foo”,然后用“-bar”附加它
  • 完成类似“当前跟踪:-条”
  • 我已经搜索了很多,并且已经尝试让每个函数都使用承诺,但是foreach并不关心这一点。我还尝试使用延迟/超时。
    但是没有成功…

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

     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));
        }
      } 
    }
    
    使用异步函数:

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

    返回承诺并使用
    map
    not
    forEach
    @AluanHaddad是的,我看到了该解决方案,但该解决方案用于跟踪它们何时全部完成(如果我错了,请纠正我)。我想要的是在foreach的下一次迭代完成后转到下一次迭代。感谢您的帮助,我使用reduce尝试了您的方法,但它给了我这个错误
    上一次迭代。then不是一个函数
    。到目前为止,我知道我完全复制了您给我的内容。@sjaakvbrant我更新了它以处理空数组。如果它仍然不起作用,那么您将不会返回承诺,并且需要更多有关
    fnHistory的信息。userUpdate