Javascript 当循环递增时,如何迭代消息收集器以收集多个输入?

Javascript 当循环递增时,如何迭代消息收集器以收集多个输入?,javascript,discord.js,collectors,Javascript,Discord.js,Collectors,我试图创建一个setup命令,用户在其中输入值,然后将这些值保存在sqldb中。但是,我很难让awaitMessages方法在for循环中等待 让输入=[];//将输入声明为空数组 让setupQ=[“请输入管理员的角色ID”,“请输入mod的角色ID”,“请输入日志频道的ID”,“请输入加入/离开频道的ID”]; 对于(i=0;i{ 返回user.author.id==message.author.id }; message.channel.awaitMessages(筛选器,{max:1,时

我试图创建一个setup命令,用户在其中输入值,然后将这些值保存在sqldb中。但是,我很难让
awaitMessages
方法在for循环中等待

让输入=[];//将输入声明为空数组
让setupQ=[“请输入管理员的角色ID”,“请输入mod的角色ID”,“请输入日志频道的ID”,“请输入加入/离开频道的ID”];
对于(i=0;i<4;i++){
message.channel.send(setupQ[i])
常量过滤器=(用户)=>{
返回user.author.id==message.author.id
};
message.channel.awaitMessages(筛选器,{max:1,时间:15000,错误:['time']})
。然后(异步收集=>{
input[i]=collected.first().content//接受用户输入并保存
}).catch(已收集=>{
message.channel.send(`:x:Setup cancelled-0封邮件已在时间限制内收集,请重试`)。然后(m=>m.delete({timeout:4000}));
});            
};
目前的情况是,机器人会立即输出问题,而不必等待用户回答。我以前使用过这个命令,但是使用了4种既丑陋又缓慢的方法。(更不用说格式化噩梦了)


有人能看到我必须做什么才能让它等待吗?

要等待每个指令执行,请在
异步
函数(如
processStuff
中使用
wait

这实际上是一种解决方法,通过利用JS的异步范例,在JS中获得一种同步执行

在前面的代码中,每个承诺的创建都不依赖于要完全评估的前一个承诺。但在这种情况下,我们正在等待创造的承诺

let input = []; // declare input as empty array
    let setupQ = ['Please enter the role ID of admin', 'Please enter the role ID of mod', 'Please enter the ID of your log channel', 'Please enter the ID of your join/leave channel'];

async function processStuff(){
    for (i = 0; i < 4; i++) {
        message.channel.send(setupQ[i])   

        const filter = (user) => {
            return user.author.id === message.author.id 
        };
        try{
        let collected = await message.channel.awaitMessages(filter, { max: 1, time: 15000, errors: ['time'] });
           input[i] = collected.first().content; //takes user input and saves it
         } 
        catch(e)
         {
            message.channel.send(`:x: Setup cancelled - 0 messages were collected in the time limit, please try again`).then(m => m.delete({ timeout: 4000 }));
         }              
};
}

processStuff();
让输入=[];//将输入声明为空数组
让setupQ=[“请输入管理员的角色ID”,“请输入mod的角色ID”,“请输入日志频道的ID”,“请输入加入/离开频道的ID”];
异步函数processStuff(){
对于(i=0;i<4;i++){
message.channel.send(setupQ[i])
常量过滤器=(用户)=>{
返回user.author.id==message.author.id
};
试一试{
let collected=await message.channel.await messages(过滤器,{max:1,时间:15000,错误:['time']});
input[i]=collected.first().content;//接受用户输入并保存
} 
捕获(e)
{
message.channel.send(`:x:Setup cancelled-0封邮件已在时间限制内收集,请重试`)。然后(m=>m.delete({timeout:4000}));
}              
};
}
processStuff();
从概念上讲,这相当于将所有4个承诺链接在一起(如
promise.then(…).then(…).then(…)
…),因此只有在前一个承诺得到充分评估并返回新承诺后,才能开始创建下一个承诺(在前一个承诺的
then
回调中)