使用 node.js 函数 async.retry 确定成功/失败
Posted
技术标签:
【中文标题】使用 node.js 函数 async.retry 确定成功/失败【英文标题】:Determining success/failure with node.js function async.retry 【发布时间】:2015-05-12 17:07:59 【问题描述】:我正在研究 node.js 模块 async,但是我对函数 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
那么如何正确使用该功能呢?
【问题讨论】:
感谢您在异步任务中展示了bind
的使用。我只是想弄清楚如何传递参数。
【参考方案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);
);
【讨论】:
让我完全不解的是为什么在文档中没有说明回调应该是您正在重试的函数的第一个参数。 @Ali: 呃,其实是right there: "task(callback, results)
- 一个接收两个参数的函数:(1) 一个回调……"以上是关于使用 node.js 函数 async.retry 确定成功/失败的主要内容,如果未能解决你的问题,请参考以下文章