Машинопись - несколько вызовов setInterval - PullRequest
1 голос
/ 08 мая 2020

У меня есть функция, в которой мне нужно несколько вызовов setInterval, однако код в них очень похож.

Есть ли у кого-нибудь идеи, как мне лучше написать это, чтобы избежать кода дублирование:

(async (): Promise<void> => {

    // 1 min interval check
    const oneMin = setInterval(async function () {
        Detail.find({ interval: 1 }, async function (err, toCheck) {
            // The Same Logic
        })
    }, minutesToMS(1));

    // 10 min interval check
    const tenMin = setInterval(async function () {
        Detail.find({ interval: 10 }, async function (err, toCheck) {
            // The Same Logic
        })
    }, minutesToMS(10));

})();

Любые идеи приветствуются.

Спасибо.

1 Ответ

2 голосов
/ 08 мая 2020

Поместите эту часть:

async function (err, toCheck) {
  // The Same Logic
}

в первую очередь в отдельную переменную, чтобы вы могли передать ее обеим .find s:

type CallbackType = Parameters<typeof Detail.find>[1];
const callback: CallbackType = async (err, toCheck) => {
    // logic
};
// 1 min interval check
setInterval(function () {
    Detail.find({ interval: 1 }, callback)
}, minutesToMS(1));

// 10 min interval check
setInterval(function () {
    Detail.find({ interval: 10 }, callback)
}, minutesToMS(10));

Если вы также хотите избежать повторения { interval: 1 } minutesToMS(1), затем:

type CallbackType = Parameters<typeof Detail.find>[1];
const callback: CallbackType = async (err, toCheck) => {
    // logic
};
const makeInterval = (interval) => {
    setInterval(function () {
        Detail.find({ interval }, callback)
    }, minutesToMS(interval));
};
makeInterval(1);
makeInterval(10);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...