Как установить TimeTime в node.js? - PullRequest
1 голос
/ 19 марта 2012

Мне нужно иметь возможность повторить попытку в node.js в случае сбоя внутри функции.Я настроил цикл while, как показано ниже, но меня немного смущает то, как мне следует обернуть вызов функции, чтобы не быть уверенным, что он не заблокирует весь мой сервер.

Что мне делать?

while(retryCount < 10 && !success){

    // Alternative one
    while(new Date().getTime() < now + 1000) {
        myFunction();
    }

    // Or:
    setTimeout( myFunction(), 1000);
}

Ответы [ 3 ]

0 голосов
/ 19 марта 2012

Этот внешний цикл while будет блокироваться, вам придется выполнить рефакторинг, используя only setTimeout.Однако тот факт, что вы хотите такого рода вещи, указывает на то, что ваша структура кода действительно ужасна и требует доработки.Что вы пытаетесь повторить?Как вы обнаруживаете ошибку?Делает ли это в 10 раз больше шансов на успех?

У меня есть сущность, содержащая обобщенную функцию, которая будет делать такие вещи для вас, но я не хочу делиться, если это проблема XY.

0 голосов
/ 19 марта 2012

Вы можете сохранить количество попыток в объекте функции.Это будет хорошо для cronjob.Если вам нужно такое же поведение в контексте запроса, вы должны хранить счетчик попыток в области запроса (не в объекте функции).

var fnc = function() {
        console.log('try');
        if (true) { // Error condition
                // Error here
                if (!fnc.tryes) fnc.tryes = 0;
                fnc.tryes++;
                console.log(fnc.tryes);
                if (fnc.tryes <= 10) {
                        setTimeout(fnc, 1000);
                } else {
                        fnc.tryes = 0;
                }
                // Something wrong
        } else {
                // We hame result
        }
};

fnc();
0 голосов
/ 19 марта 2012

Я бы сказал, используйте метод setTimeout, чтобы клиент не застревал внутри цикла while, который проверяет время.

...