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();
};

  

  


免責聲明!

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



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