[英]How to “keep trying until it works” with an event-driven model?
我正在编写看起来像这样的代码:
function someFunction()
{
doStuffWithCallback(function(success)
{
if(success)
{
...
// do stuff here
...
}
else
someFunction();
});
}
基本上,继续尝试“ doStuffWithCallback”,直到回调收到绿灯为止。 通常,这将通过循环来完成,但是在从未达到成功的情况下,如何使用事件驱动的模型执行此操作而又不会引起无限递归? ( success
可能取决于外部服务器之类的东西,因此,如果它们出现故障,它将一直是错误的)。
代码的结构不能太多更改。 由于要使用的API,我必须使用回调来完成所需的操作。
您的事件驱动模型不应如下所示:
您的事件驱动模型应如下所示:
这样,您的事件分配机制是异步的,并且根本不会进行任何递归调用。
然后,由于您仍不希望事件永远被调度,因此您可能会在组件内部引入一些限制, 以定义事件将被重新调度的次数。 一个简单的整数变量就可以。
至少要实现一种回退机制,该机制可能在每次回调失败之前等待逐渐更长的时间间隔,然后才对重复尝试进行排队。
您可以引入一个计数器,并使用someFunction(1000)
进行调用以尝试1000次。
function someFunction(countDown)
{
doStuffWithCallback(function(success)
{
if(success)
{
...
// do stuff here
...
}
else if(countDown > 0)
someFunction(countDown - 1);
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.