mirror of
https://github.com/tenrok/axios.git
synced 2026-06-20 20:00:40 +03:00
Merge pull request #372 from rubennorte/promise-adapters
Changing adapter signature to receive config and return promises
This commit is contained in:
@@ -247,8 +247,8 @@ These are the available config options for making requests. Only the `url` is re
|
|||||||
withCredentials: false, // default
|
withCredentials: false, // default
|
||||||
|
|
||||||
// `adapter` allows custom handling of requests which makes testing easier.
|
// `adapter` allows custom handling of requests which makes testing easier.
|
||||||
// Call `resolve` or `reject` and supply a valid response (see [response docs](#response-api)).
|
// Return a promise and supply a valid response (see [response docs](#response-api)).
|
||||||
adapter: function (resolve, reject, config) {
|
adapter: function (config) {
|
||||||
/* ... */
|
/* ... */
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
# axios // adapters
|
# axios // adapters
|
||||||
|
|
||||||
The modules under `adapters/` are modules that handle dispatching a request and settling a `Promise` once a response is received.
|
The modules under `adapters/` are modules that handle dispatching a request and settling a returned `Promise` once a response is received.
|
||||||
|
|
||||||
## Example
|
## Example
|
||||||
|
|
||||||
```js
|
```js
|
||||||
var settle = require('./../core/settle');
|
var settle = require('./../core/settle');
|
||||||
|
|
||||||
module.exports myAdapter(resolve, reject, config) {
|
module.exports myAdapter(config) {
|
||||||
// At this point:
|
// At this point:
|
||||||
// - config has been merged with defaults
|
// - config has been merged with defaults
|
||||||
// - request transformers have already run
|
// - request transformers have already run
|
||||||
@@ -16,6 +16,8 @@ module.exports myAdapter(resolve, reject, config) {
|
|||||||
// Make the request using config provided
|
// Make the request using config provided
|
||||||
// Upon response settle the Promise
|
// Upon response settle the Promise
|
||||||
|
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
|
||||||
var response = {
|
var response = {
|
||||||
data: responseData,
|
data: responseData,
|
||||||
status: request.status,
|
status: request.status,
|
||||||
@@ -30,5 +32,6 @@ module.exports myAdapter(resolve, reject, config) {
|
|||||||
// From here:
|
// From here:
|
||||||
// - response transformers will run
|
// - response transformers will run
|
||||||
// - response interceptors will run
|
// - response interceptors will run
|
||||||
|
});
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ var createError = require('../core/createError');
|
|||||||
var enhanceError = require('../core/enhanceError');
|
var enhanceError = require('../core/enhanceError');
|
||||||
|
|
||||||
/*eslint consistent-return:0*/
|
/*eslint consistent-return:0*/
|
||||||
module.exports = function httpAdapter(resolve, reject, config) {
|
module.exports = function httpAdapter(config) {
|
||||||
|
return new Promise(function dispatchHttpRequest(resolve, reject) {
|
||||||
var data = config.data;
|
var data = config.data;
|
||||||
var headers = config.headers;
|
var headers = config.headers;
|
||||||
var timer;
|
var timer;
|
||||||
@@ -169,4 +170,5 @@ module.exports = function httpAdapter(resolve, reject, config) {
|
|||||||
} else {
|
} else {
|
||||||
req.end(data);
|
req.end(data);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
+3
-1
@@ -8,7 +8,8 @@ var isURLSameOrigin = require('./../helpers/isURLSameOrigin');
|
|||||||
var createError = require('../core/createError');
|
var createError = require('../core/createError');
|
||||||
var btoa = (typeof window !== 'undefined' && window.btoa) || require('./../helpers/btoa');
|
var btoa = (typeof window !== 'undefined' && window.btoa) || require('./../helpers/btoa');
|
||||||
|
|
||||||
module.exports = function xhrAdapter(resolve, reject, config) {
|
module.exports = function xhrAdapter(config) {
|
||||||
|
return new Promise(function dispatchXhrRequest(resolve, reject) {
|
||||||
var requestData = config.data;
|
var requestData = config.data;
|
||||||
var requestHeaders = config.headers;
|
var requestHeaders = config.headers;
|
||||||
|
|
||||||
@@ -155,4 +156,5 @@ module.exports = function xhrAdapter(resolve, reject, config) {
|
|||||||
|
|
||||||
// Send the request
|
// Send the request
|
||||||
request.send(requestData);
|
request.send(requestData);
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
var utils = require('./../utils');
|
var utils = require('./../utils');
|
||||||
var transformData = require('./transformData');
|
var transformData = require('./transformData');
|
||||||
var enhanceError = require('./enhanceError');
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dispatch a request to the server using whichever adapter
|
* Dispatch a request to the server using whichever adapter
|
||||||
@@ -36,8 +35,6 @@ module.exports = function dispatchRequest(config) {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
return new Promise(function executor(resolve, reject) {
|
|
||||||
try {
|
|
||||||
var adapter;
|
var adapter;
|
||||||
|
|
||||||
if (typeof config.adapter === 'function') {
|
if (typeof config.adapter === 'function') {
|
||||||
@@ -51,13 +48,10 @@ module.exports = function dispatchRequest(config) {
|
|||||||
adapter = require('../adapters/http');
|
adapter = require('../adapters/http');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof adapter === 'function') {
|
return Promise.resolve(config)
|
||||||
adapter(resolve, reject, config);
|
// Wrap synchronous adapter errors and pass configuration
|
||||||
}
|
.then(adapter)
|
||||||
} catch (e) {
|
.then(function onFulfilled(response) {
|
||||||
reject(enhanceError(e, config));
|
|
||||||
}
|
|
||||||
}).then(function onFulfilled(response) {
|
|
||||||
// Transform response data
|
// Transform response data
|
||||||
response.data = transformData(
|
response.data = transformData(
|
||||||
response.data,
|
response.data,
|
||||||
|
|||||||
@@ -36,35 +36,6 @@ describe('requests', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should reject on adapter errors', function (done) {
|
|
||||||
// disable jasmine.Ajax since we're hitting a non-existant server anyway
|
|
||||||
jasmine.Ajax.uninstall();
|
|
||||||
|
|
||||||
var resolveSpy = jasmine.createSpy('resolve');
|
|
||||||
var rejectSpy = jasmine.createSpy('reject');
|
|
||||||
|
|
||||||
var adapterError = new Error('adapter error');
|
|
||||||
var adapterThatFails = function () {
|
|
||||||
throw adapterError;
|
|
||||||
};
|
|
||||||
|
|
||||||
var finish = function () {
|
|
||||||
expect(resolveSpy).not.toHaveBeenCalled();
|
|
||||||
expect(rejectSpy).toHaveBeenCalled();
|
|
||||||
var reason = rejectSpy.calls.first().args[0];
|
|
||||||
expect(reason).toBe(adapterError);
|
|
||||||
expect(reason.config.method).toBe('get');
|
|
||||||
expect(reason.config.url).toBe('/foo');
|
|
||||||
|
|
||||||
done();
|
|
||||||
};
|
|
||||||
|
|
||||||
axios('/foo', {
|
|
||||||
adapter: adapterThatFails
|
|
||||||
}).then(resolveSpy, rejectSpy)
|
|
||||||
.then(finish, finish);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should reject on network errors', function (done) {
|
it('should reject on network errors', function (done) {
|
||||||
// disable jasmine.Ajax since we're hitting a non-existant server anyway
|
// disable jasmine.Ajax since we're hitting a non-existant server anyway
|
||||||
jasmine.Ajax.uninstall();
|
jasmine.Ajax.uninstall();
|
||||||
|
|||||||
Reference in New Issue
Block a user