2012-03-19 125 views
1

我需要能夠在node.js中發生功能內部故障時重試。我已經設置了一個while循環,如下所示,但是我對於如何封裝函數調用以確保它不會阻止我的整個服務器有些困惑。如何在node.js中設置超時值?

我該怎麼辦?

while(retryCount < 10 && !success){ 

    // Alternative one 
    while(new Date().getTime() < now + 1000) { 
     myFunction(); 
    } 

    // Or: 
    setTimeout(myFunction(), 1000); 
} 

回答

0

您可以將多個tryes存儲在函數對象中。這對cronjob會很好。如果您在請求上下文中需要相同的行爲,則必須將請求計數器存儲在請求範圍中(而不是函數對象中)。

var fnc = function() { 
     console.log('try'); 
     if (true) { // Error condition 
       // Error here 
       if (!fnc.tryes) fnc.tryes = 0; 
       fnc.tryes++; 
       console.log(fnc.tryes); 
       if (fnc.tryes <= 10) { 
         setTimeout(fnc, 1000); 
       } else { 
         fnc.tryes = 0; 
       } 
       // Something wrong 
     } else { 
       // We hame result 
     } 
}; 

fnc(); 
0

我會說使用setTimeout方法,這樣客戶端將不會卡在while循環檢查時間。

0

那個while while while循環會阻塞,你必須使用只有 setTimeout重構。然而,你想要這種事情的事實告訴我,你的代碼結構非常糟糕,需要更多的修改。你在重試什麼?你如何檢測錯誤情況?做10次真的會讓成功的機會更高嗎?

我有一個包含泛型函數的gist,它會爲你做這種事情,但如果這是一個XY問題,我不願意分享。

+0

它將用於CRONjob,它向公共API發出HTTP請求並提取一些數據。在發生HTTP錯誤的情況下,我想睡一會兒腳本並再次嘗試一定次數 – Industrial 2012-03-19 10:25:13

+1

@Industrial https://gist.github.com/2106760。修改以適應您的願望。這是非阻塞的,可以添加錯誤檢查或複製模式。任何時候你有一個'while'循環,你將會阻止。 – 2012-03-19 10:27:58