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