Async.retry 在等待间隔之前立即执行
Posted
技术标签:
【中文标题】Async.retry 在等待间隔之前立即执行【英文标题】:Async.retry executes immediately before waiting for interval 【发布时间】:2015-12-08 20:12:51 【问题描述】:async.retry(times : 25,interval : 30000,myFunction.bind(functionData),function(err,results)
console.log("===================================")
console.log("Async function finished processing")
return;
)
myFunction 会立即被调用,并且默认调用了 5 次。通话之间也没有等待期
【问题讨论】:
你能显示myFunction
的代码吗?
【参考方案1】:
我认为这是版本问题。
旧版本的async.retry
只能以数字作为第一个参数来调用(例如参见v1.2.0 docs)
它不接受opts
对象。因此,如果您将它而不是数字作为第一个参数传入,则默认为无间隔且重试次数为 5。
我在使用库的 v0.9.0 时遇到了同样的问题,更新到 v1.4.2 解决了这个问题。
【讨论】:
【参考方案2】:重试取决于函数中的回调。如果回调的第一个参数不是假的,那么它将根据您的times
和interval
设置重试。例如:
var async = require('async');
var count = 0;
var functionData = some: 'data' ;
var myFunction = function(callback, results)
console.log(++count);
process.nextTick(function()
if (count < 5) // Fail 5 times
return callback( message: 'this failed' , null);
callback(null, message: 'this succeeded' );
);
;
async.retry(times : 25, interval : 1000, myFunction.bind(functionData), function(err, results)
console.log("===================================")
console.log("Async function finished processing")
return;
);
这个输出:
1
2
3
4
5
===================================
Async function finished processing
每次尝试之间有 1 秒的间隔
【讨论】:
async.retry(opts,function(callback) console.log("XXXX"); return callback(new Error("sda")); ,function(err) callback(err ); ); 问题是异步的。即使我使用 times : 25, interval : 60000 时重试也会执行 5 次 除了未定义的callback
,您粘贴在您的第一条评论中的 sn-p 按我的预期工作。 IE。它重试 25 次。
尝试降低测试间隔。也许您在等待 5 分钟后在其他地方超时?以上是关于Async.retry 在等待间隔之前立即执行的主要内容,如果未能解决你的问题,请参考以下文章
Delphi WinAPI WaitForSingleObject-等待函数-等待指定对象处于有信号状态或超时间隔结束。