【发布时间】:2021-05-28 07:35:39
【问题描述】:
总结:
当我运行这个函数时,它会运行一次,跳过我的方法,然后以正确的顺序再次运行。
代码:
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';
};
控制台日志:
问题:
主要问题是它正在发生......有没有办法重写它不会重现错误?
次要问题是它发生的原因。我还没有找到任何关于这种事情发生的文档,我很好奇它的起源。
【问题讨论】:
-
您将
for loop(同步代码)与.fetch(异步)混合。所以它会并行运行所有的`client.channels.cache.get(game_log_channel).messages.fetch(keys[i])`,然后只打印第一个响应的,依此类推。如果你想fetch(1)然后等待响应然后fetch(2)使用 await 代替 -
'not found' 是倒数第二行
标签: javascript node.js for-loop discord.js