From fa3c6d22f7a5e0a963119109fccb8d86ad981c03 Mon Sep 17 00:00:00 2001 From: pbarbiero Date: Sat, 12 Aug 2017 08:50:21 -0500 Subject: [PATCH] Decorate resolve and reject to clear timeout --- lib/adapters/http.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/adapters/http.js b/lib/adapters/http.js index e48c411..e770bce 100644 --- a/lib/adapters/http.js +++ b/lib/adapters/http.js @@ -15,10 +15,18 @@ var enhanceError = require('../core/enhanceError'); /*eslint consistent-return:0*/ module.exports = function httpAdapter(config) { - return new Promise(function dispatchHttpRequest(resolve, reject) { + return new Promise(function dispatchHttpRequest(resolvePromise, rejectPromise) { + var timer; + var resolve = function resolve(value) { + clearTimeout(timer); + resolvePromise(value); + }; + var reject = function reject(value) { + clearTimeout(timer); + rejectPromise(value); + }; var data = config.data; var headers = config.headers; - var timer; // Set User-Agent (required by some servers) // Only set header if it hasn't been set in config @@ -130,10 +138,6 @@ module.exports = function httpAdapter(config) { var req = transport.request(options, function handleResponse(res) { if (req.aborted) return; - // Response has been received so kill timer that handles request timeout - clearTimeout(timer); - timer = null; - // uncompress the response body transparently if required var stream = res; switch (res.headers['content-encoding']) { @@ -199,7 +203,7 @@ module.exports = function httpAdapter(config) { }); // Handle request timeout - if (config.timeout && !timer) { + if (config.timeout) { timer = setTimeout(function handleRequestTimeout() { req.abort(); reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', req));