2014-01-07 32 views
0

我是node.js的新手。我正在使用Restify和node.js.我不得不向BigCommerce API發送幾個請求。處理從node.js發送的每個請求的處理超時問題(Restify)

我實際上增加了每個響應的計數器,所以成功和錯誤的情況下,只留下情況是我沒有得到答覆。 爲了更安全的一面,我想處理超時問題,即處理一個案例,當我沒有得到來自API的一些請求的回覆。

如何處理通過JsonClient(Restify)發送的每個請求的請求超時?

謝謝。

回答

0

這聽起來像你正在做的是一次性全部發送幾個API請求你到任何特定請求的響應之前(即所有在平行),你正在做的API響應引用計數,你收到知道你什麼時候完成。

如果這是你在做什麼,然後超時最基本的版本,這種情況會是這樣的(注:我沒有測試過這一點):

var apiTimeout; 

function apiTimedOut() { 
    console.log("Yikes!"); 
    apiTimeout = null; 
} 

function doABunchOfAPICalls() { 
     // call 'apiTimedOut' after 1 second (unless gotAllAPIResponses called first). 
    apiTimeout = setTimeout(function() {apiTimedOut();}, 1000); 

    ... do all your API calls here... 
} 

    // called from wherever you are reference counting when all responses received. 
function gotAllAPIResponses() { 
    if (apiTimeout) { 
     clearTimeout(apiTimeout); 
     apiTimeout = null; 
    } 
} 

===== ================================================== ===========

這就是說,一個更好的辦法可能是使用做從節點的HTTP請求時到另一臺服務器已經內置超時(如「請求」節點模塊的BigCommerce API服務器)。看此頁「超時」,看看一個例子:

http://www.sitepoint.com/making-http-requests-in-node-js/ 

============================== ====================================

第三,而不是做自己的引用計算你應該考慮「承諾」,特別是「.all」功能。它允許你做一堆事情,只有在一切完成後才調用回調。舉例來說,這裏是採用了棱角分明的一個問題/答案參考,準確的功能(帶超時):

http://stackoverflow.com/questions/19900465/angularjs-q-all-timeout