mirror of
https://github.com/tenrok/axios.git
synced 2026-06-20 20:00:40 +03:00
Merge pull request #1399 from mattridley/master
Fixing #537 Rejecting promise if request is cancelled by the browser
This commit is contained in:
@@ -80,6 +80,18 @@ module.exports = function xhrAdapter(config) {
|
|||||||
request = null;
|
request = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Handle browser request cancellation (as opposed to a manual cancellation)
|
||||||
|
request.onabort = function handleAbort() {
|
||||||
|
if (!request) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
reject(createError('Request aborted', config, 'ECONNABORTED', request));
|
||||||
|
|
||||||
|
// Clean up request
|
||||||
|
request = null;
|
||||||
|
};
|
||||||
|
|
||||||
// Handle low level network errors
|
// Handle low level network errors
|
||||||
request.onerror = function handleError() {
|
request.onerror = function handleError() {
|
||||||
// Real errors are hidden from us by the browser
|
// Real errors are hidden from us by the browser
|
||||||
|
|||||||
@@ -79,6 +79,31 @@ describe('requests', function () {
|
|||||||
.then(finish, finish);
|
.then(finish, finish);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should reject on abort', function (done) {
|
||||||
|
var resolveSpy = jasmine.createSpy('resolve');
|
||||||
|
var rejectSpy = jasmine.createSpy('reject');
|
||||||
|
|
||||||
|
var finish = function () {
|
||||||
|
expect(resolveSpy).not.toHaveBeenCalled();
|
||||||
|
expect(rejectSpy).toHaveBeenCalled();
|
||||||
|
var reason = rejectSpy.calls.first().args[0];
|
||||||
|
expect(reason instanceof Error).toBe(true);
|
||||||
|
expect(reason.config.method).toBe('get');
|
||||||
|
expect(reason.config.url).toBe('/foo');
|
||||||
|
expect(reason.request).toEqual(jasmine.any(XMLHttpRequest));
|
||||||
|
|
||||||
|
done();
|
||||||
|
};
|
||||||
|
|
||||||
|
axios('/foo')
|
||||||
|
.then(resolveSpy, rejectSpy)
|
||||||
|
.then(finish, finish);
|
||||||
|
|
||||||
|
getAjaxRequest().then(function (request) {
|
||||||
|
request.abort();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('should reject when validateStatus returns false', function (done) {
|
it('should reject when validateStatus returns false', function (done) {
|
||||||
var resolveSpy = jasmine.createSpy('resolve');
|
var resolveSpy = jasmine.createSpy('resolve');
|
||||||
var rejectSpy = jasmine.createSpy('reject');
|
var rejectSpy = jasmine.createSpy('reject');
|
||||||
|
|||||||
Reference in New Issue
Block a user