Nodejs http 請求延時的處理方法(防止程序崩潰)


 

 

有時候因為接口沒開,或者其他原因,導致http.request 請求延時,一直耗費資源不說,還會導致程序報錯崩潰,延時處理其實也是一種錯誤處理。

var APIGET = function (url, callback) {
    debug("向API服務請求數據中...");
    debug("url:"+url)
//下面是發送請求時的延時處理,一般用不到
    var requestTimer = setTimeout(function () {
        req.abort();
        debug('......Request Timeout......');
    },5000);
    var op = {
        host:CONFIG.API_SERVICE_HOST,
        port:CONFIG.API_SERVICE_PORT,
        method:'GET',
        path:url
    };
 
    var req = HTTP.request(
        op,function(res) {
            clearTimeout(requestTimer);
//下面是請求接口數據,得不到回應時,我們關閉等待返回數據的狀態,因為有5秒的定時器,
//5秒內如果收到了完整的數據,http模塊會自動跳轉到res.on('end', function(){})
//因為我們在res.on('end', function(){})的回調函數中clearTimeout(responseTimer),
//清除了這個定時器,所以就不用擔心在接受到數據后定時器還反復執行。
            var responseTimer = setTimeout(function () {
                res.destroy();
                debug('......Response Timeout......');
            },5000);
            var recvData = "";
            res.on('data', function(chunk) {
                recvData += chunk;
                // debug(recvData);
            });
            res.on('end', function() {
                clearTimeout(responseTimer);
                if (callback) {
                    callback(null, JSON.parse(recvData));
                }
                debug("請求結束");
            });
        });
    req.on('error', function (e) {
        if (callback) {
            callback(e, null);
        }
    });
 
    req.end();
};

 

轉載地址:https://www.cnblogs.com/yourstars/p/6009368.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM