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】:

重试取决于函数中的回调。如果回调的第一个参数不是假的,那么它将根据您的timesinterval 设置重试。例如:

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-等待函数-等待指定对象处于有信号状态或超时间隔结束。

Js同步异步机制

避免 setInterval() 在间隔开始时执行

Python线程以精确的时间间隔执行

使用 Angular 6 中的 subscribe 在间隔中调用和等待

创建执行动画的等待队列