Javascript 取数函数未按顺序执行| Discord.js

Javascript 取数函数未按顺序执行| Discord.js,javascript,node.js,for-loop,discord.js,Javascript,Node.js,For Loop,Discord.js,摘要: 当我运行这个函数时,它只运行一次,跳过我的方法,然后按正确的顺序再次运行 守则: 控制台日志: 问题是: 主要问题是它正在发生。。。有没有什么方法可以重写它而不再现错误 第二个问题是它为什么会发生。我还没有找到任何关于这类事情发生的文档,我很好奇它的起源。想想看。取回一个承诺。当您调用fetch方法时,知道它是异步的,您基本上是这样说的 获取ID为keys[i]的消息-无论它有多长时间 接受-但请在获取时,即承诺已解决, 检查获取的邮件内容是否包含 搜索频道id。干杯 注意WHEN部分。

摘要:

当我运行这个函数时,它只运行一次,跳过我的方法,然后按正确的顺序再次运行

守则:

控制台日志:

问题是:

主要问题是它正在发生。。。有没有什么方法可以重写它而不再现错误

第二个问题是它为什么会发生。我还没有找到任何关于这类事情发生的文档,我很好奇它的起源。

想想看。取回一个承诺。当您调用fetch方法时,知道它是异步的,您基本上是这样说的

获取ID为keys[i]的消息-无论它有多长时间 接受-但请在获取时,即承诺已解决, 检查获取的邮件内容是否包含 搜索频道id。干杯

注意WHEN部分。then方法中的任何内容都会在解析提取后运行,发送HTTP请求、接收数据、转换数据等。。你不知道要花多长时间

无论如何。。。因为你处于一个for循环中,现在有点不同了。这次就像

我有钥匙,长度ID。把这些信息都给我 将是钥匙[i]。不管需要多长时间,但请在 消息已提取,请检查提取的消息内容是否包含 搜索到的频道id。我知道你开始获取它们的顺序, 我可以理解,完成这项工作可能需要不同的时间 结果出来了。你不必像我一样一个接一个地去拿 不管你取完的顺序如何

因此,您的代码开始按照键[0]、键[1]等顺序解析这些承诺,但如果不等待前面的承诺完成,您无法控制承诺何时完成

最后还有一个返回“未找到”。那就像说

做这些我上面提到的,但是,你知道吗,我真的不在乎 如果你能找到那条消息,我们就说它没有找到。我也是 懒得等你做完这些。你仍然可以完成这项工作 我告诉过你但是我

您可以更新代码并使用该方法查找给定函数返回truthy值的项:

异步函数findMessagechannelId{ const gameLogChannel=client.channels.cache.getgameLogChannel; const logMessages=wait gameLogChannel.messages.fetch{limit:10}; const foundMessage=logMessages.findmsg=> msg.content.includeChannel ID, ; 返回foundMessage | |“未找到”; } findMessage'98573472597130' .thenconsole.log;
我建议您观看

将循环同步代码与.fetch async混合使用。因此,它将在Parralel中运行所有`client.channels.cache.getgame_log_channel.messages.fetchkeys[i]`并只打印首先响应的那个,依此类推。如果您想获取1然后等待响应,则获取2使用等待,而不是“未找到”是倒数第二行。很抱歉响应太晚,非常感谢您详细介绍—正如他们所说,教人钓鱼。你的解决方案非常有效
function fetch_messages(searched_channel_id){
    client.channels.cache.get(game_log_channel).messages.fetch({ limit: 10 })
        .then(messages => {
            keys = Array.from(messages.keys());
            console.log(keys);
            for ( var i=0; i < keys.length; i++){
                console.log('iterating through messages');
                client.channels.cache.get(game_log_channel).messages.fetch(keys[i])
                    .then(msg => {
                        var msgContent = msg.content;
                        if (msgContent === undefined){
                            msgContent = 'undefined';
                            console.log('undefined message');
                        }
                        else if (msgContent.includes(searched_channel_id)){
                            console.log('channel record found in logs');
                            return [ msg, msgContent, msg.id ];
                        }
                    });
            }
        });
    return 'not found';
};