Javascript 使用node.js函数async.retry确定成功/失败

Javascript 使用node.js函数async.retry确定成功/失败,javascript,node.js,asynchronous,node-async,Javascript,Node.js,Asynchronous,Node Async,我正在研究node.js模块async,但函数async.retry有一些问题 根据它的, 函数将继续尝试该任务,直到任务成功或机会用尽。但我的任务如何判断成功或失败呢 我尝试了下面的代码: var async = require('async'); var opts = { count : -3 }; async.retry(5, function (cb, results) { ++this.count; console.log(this.count, resul

我正在研究node.js模块async,但函数async.retry有一些问题

根据它的, 函数将继续尝试该任务,直到任务成功或机会用尽。但我的任务如何判断成功或失败呢

我尝试了下面的代码:

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未定义
未定义未定义

那么,如何正确使用该函数呢?

您希望您的
else
-分支失败。为此,您需要向error参数传递一些信息;目前,您只需通过
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);
});

我完全不明白的是,为什么文档中没有说明回调应该是您正在重试的函数的第一个参数。@阿里:嗯,实际上是:“
task(callback,results)
-一个接收两个参数的函数:(1)回调…”感谢您在异步任务中展示了
bind
的用法。我只是想弄清楚如何传递参数。