Подтвердить что ты не робот

Определение успеха/неудачи с помощью функции node.js async.retry

Я изучаю асинхронный модуль node.js, но у меня есть некоторые проблемы с функцией async.retry.

В соответствии с github docs, функция продолжит выполнение задачи до тех пор, пока она не преуспеет или шансы будут исчерпаны. Но как моя задача сказать успех или неудачу?

Я пробовал код ниже:

var async = require('async');

var opts = {
    count : -3
};

async.retry(5, function (cb, results) {
    ++this.count;
    console.log(this.count, results);
    if (this.count > 0) cb(null, this.count);
    else cb();
}.bind(opts), function (err, results) {
   console.log(err, results);
});

Я ожидаю, что он будет работать до count === 1, но он всегда печатает это:

-2 undefined
undefined undefined

Итак, как я могу правильно использовать функцию?

4b9b3361

Ответ 1

Вы хотите, чтобы ваш else -branch потерпел неудачу. Для этого вам нужно передать что-то в параметр ошибки; в настоящее время вы просто проходите undefined, который сигнализирует об успехе - и о том, что вы вернетесь.

async.retry(5, function (cb, results) {
    ++this.count;
    console.log(this.count, results);
    if (this.count > 0) cb(null, this.count);
    else cb(new Error("count too low"));
}.bind(opts), function (err, results) {
   console.log(err, results);
});