[英]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.