mirror of
https://github.com/tenrok/axios.git
synced 2026-06-20 20:00:40 +03:00
Decorate resolve and reject to clear timeout
This commit is contained in:
+11
-7
@@ -15,10 +15,18 @@ var enhanceError = require('../core/enhanceError');
|
|||||||
|
|
||||||
/*eslint consistent-return:0*/
|
/*eslint consistent-return:0*/
|
||||||
module.exports = function httpAdapter(config) {
|
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 data = config.data;
|
||||||
var headers = config.headers;
|
var headers = config.headers;
|
||||||
var timer;
|
|
||||||
|
|
||||||
// Set User-Agent (required by some servers)
|
// Set User-Agent (required by some servers)
|
||||||
// Only set header if it hasn't been set in config
|
// 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) {
|
var req = transport.request(options, function handleResponse(res) {
|
||||||
if (req.aborted) return;
|
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
|
// uncompress the response body transparently if required
|
||||||
var stream = res;
|
var stream = res;
|
||||||
switch (res.headers['content-encoding']) {
|
switch (res.headers['content-encoding']) {
|
||||||
@@ -199,7 +203,7 @@ module.exports = function httpAdapter(config) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Handle request timeout
|
// Handle request timeout
|
||||||
if (config.timeout && !timer) {
|
if (config.timeout) {
|
||||||
timer = setTimeout(function handleRequestTimeout() {
|
timer = setTimeout(function handleRequestTimeout() {
|
||||||
req.abort();
|
req.abort();
|
||||||
reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', req));
|
reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', req));
|
||||||
|
|||||||
Reference in New Issue
Block a user