首页 > 解决方案 > 等待 foreach 任务完成以继续

问题描述

嘿,我希望我的机器人在 foreach 完成持续时间后发送一条消息

代码:


        let beforecheck = new Date();


        bot.guilds.forEach(guild => {

            //my foreach code

            }).then(() => {

            let aftercheck = new Date();

            var finished = new Discord.RichEmbed()
            .setDescription("✔ Finished ✔")
            .addField(" Bot Latency", bot.ping + " ms")
            .addField("expected time", expectedtime + " minute(s)")
            .addField("final time", (60000 / (beforecheck - aftercheck)) + " minute(s)")

            message.channel.send(finished)

            })

感谢您的任何回复

标签: javascriptnode.jsdiscord.js

解决方案


从您的代码看来,您似乎希望sforEach花费大量时间,并且从您正在迭代guilds 的事实来看,我希望这涉及某种异步 Discord API 调用。如果这两个都是真的,forEach那么这个工作的工具是错误的。

如果订单很重要:(在一个async function

    let beforecheck = new Date();

    for(const guild of bot.guilds) { //might need bot.guilds.array()
        //use await on asynchronous calls
    }

    let aftercheck = new Date();

    var finished = new Discord.RichEmbed()
        .setDescription("✔ Finished ✔")
        .addField(" Bot Latency", bot.ping + " ms")
        .addField("expected time", expectedtime + " minute(s)")
        .addField("final time", (60000 / (beforecheck - aftercheck)) + " minute(s)")

    message.channel.send(finished)

如果顺序无关紧要

    let beforecheck = new Date();

    await Promise.all(bot.guilds.map(guild => {
        //return a promise or use async/await here
    }); //can also use .then() here but async/await is better

    let aftercheck = new Date();

    var finished = new Discord.RichEmbed()
        .setDescription("✔ Finished ✔")
        .addField(" Bot Latency", bot.ping + " ms")
        .addField("expected time", expectedtime + " minute(s)")
        .addField("final time", (60000 / (beforecheck - aftercheck)) + " minute(s)")

    message.channel.send(finished)

推荐阅读