Вызов функции asyn c каждую минуту в течение 5 минут в nodejs - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь вызвать функцию asyn c каждую минуту в течение 5 минут перед выходом из основной функции. Ниже приведена функция print_data(), которую я вызываю в функции main().

var print_data = async () => {
    console.log("Hello")
}


async function main() {
    process.stderr.write("--Start--")
    var data = await print_data()
    console.log(data)
}

main()

Очень новичок в написании функции asyn c. Как лучше всего вызывать функцию print_data каждую минуту в течение 5 минут и печатать результат каждую минуту? Я пробовал что-то с помощью setInterval и не смог полностью выполнить функцию.

Любая помощь будет хороша. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Это один из способов сделать это с помощью setInterval и clearInterval. Подробнее об этом здесь: https://nodejs.org/api/timers.html#timers_clearinterval_timeout

Использование IIFE для предотвращения загрязнения глобальной области.

(function (){
    let counter = 0;  //counter to keep track of number of times the setInterval Cb is called
    let data; // to store reference of Timeout object as returned by setInterval, this is used in clearInterval 

    const print_data = async () => {
        console.log("Hello")
        counter++;
        if (counter == '5') {
            clearInterval(data);
        }
    }


    async function main() {
        process.stderr.write("--Start--")
        data = setInterval(print_data, 1000*60); //60 seconds
    }

    main();

})();
0 голосов
/ 13 июля 2020

Пожалуйста, проверьте, может ли приведенный ниже код быть решением.

var print_data = async () => {
    console.log("Hello")
    return "Hello";
}

var call_print_data = () => new Promise((resolve, reject) => {
    var count = 0;
    var interval = setInterval(async () => {
        var res = await print_data();
        count += 1;

        if (count === 5) { // if it has been run 5 times, we resolve the promise
            clearInterval(interval);
            resolve(res); // result of promise
        }
    }, 1000 * 60); // 1 min interval
});

async function main() {
    process.stderr.write("--Start--")
    var data = await call_print_data(); // The main function will wait 5 minutes here
    console.log(data)
}

main()
...