Skip to content

Commit 61b1efc

Browse files
author
Steffan
committed
update interceptor loop
1 parent 59c7d78 commit 61b1efc

File tree

10 files changed

+735
-990
lines changed

10 files changed

+735
-990
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
"karma-safari-launcher": "^1.0.0",
5151
"karma-webpack": "^2.0.9",
5252
"replace-in-file": "^3.1.1",
53-
"rollup": "^0.55.5",
53+
"rollup": "^0.56.2",
5454
"rollup-plugin-buble": "^0.19.1",
5555
"uglify-js": "^3.3.10",
5656
"vue": "^2.5.13",

src/http/client/index.js

+22-29
Original file line numberDiff line numberDiff line change
@@ -9,52 +9,45 @@ import {warn, when, isObject, isFunction, inBrowser} from '../../util';
99

1010
export default function (context) {
1111

12-
var reqHandlers = [sendRequest], resHandlers = [], handler;
12+
const reqHandlers = [sendRequest], resHandlers = [];
1313

1414
if (!isObject(context)) {
1515
context = null;
1616
}
1717

1818
function Client(request) {
19-
return new Promise((resolve, reject) => {
19+
while (reqHandlers.length) {
2020

21-
function exec() {
21+
const handler = reqHandlers.pop();
2222

23-
handler = reqHandlers.pop();
23+
if (isFunction(handler)) {
2424

25-
if (isFunction(handler)) {
26-
handler.call(context, request, next);
27-
} else {
28-
warn(`Invalid interceptor of type ${typeof handler}, must be a function`);
29-
next();
30-
}
31-
}
25+
let response, next;
3226

33-
function next(response) {
27+
response = handler.call(context, request, val => next = val) || next;
3428

35-
if (isFunction(response)) {
36-
37-
resHandlers.unshift(response);
29+
if (isObject(response)) {
30+
return new Promise((resolve, reject) => {
3831

39-
} else if (isObject(response)) {
32+
resHandlers.forEach(handler => {
33+
response = when(response, response => {
34+
return handler.call(context, response) || response;
35+
}, reject);
36+
});
4037

41-
resHandlers.forEach(handler => {
42-
response = when(response, response => {
43-
return handler.call(context, response) || response;
44-
}, reject);
45-
});
38+
when(response, resolve, reject);
4639

47-
when(response, resolve, reject);
40+
}, context);
41+
}
4842

49-
return;
43+
if (isFunction(response)) {
44+
resHandlers.unshift(response);
5045
}
5146

52-
exec();
47+
} else {
48+
warn(`Invalid interceptor of type ${typeof handler}, must be a function`);
5349
}
54-
55-
exec();
56-
57-
}, context);
50+
}
5851
}
5952

6053
Client.use = handler => {
@@ -66,7 +59,7 @@ export default function (context) {
6659

6760
function sendRequest(request, resolve) {
6861

69-
var client = request.client || (inBrowser ? xhrClient : nodeClient);
62+
const client = request.client || (inBrowser ? xhrClient : nodeClient);
7063

7164
resolve(client(request));
7265
}

src/http/interceptor/before.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@
44

55
import {isFunction} from '../../util';
66

7-
export default function (request, next) {
7+
export default function (request) {
88

99
if (isFunction(request.before)) {
1010
request.before.call(this, request);
1111
}
1212

13-
next();
1413
}

src/http/interceptor/cors.js

+3-4
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ import {inBrowser} from '../../util';
88

99
const SUPPORTS_CORS = inBrowser && 'withCredentials' in new XMLHttpRequest();
1010

11-
export default function (request, next) {
11+
export default function (request) {
1212

1313
if (inBrowser) {
1414

15-
var orgUrl = Url.parse(location.href);
16-
var reqUrl = Url.parse(request.getUrl());
15+
const orgUrl = Url.parse(location.href);
16+
const reqUrl = Url.parse(request.getUrl());
1717

1818
if (reqUrl.protocol !== orgUrl.protocol || reqUrl.host !== orgUrl.host) {
1919

@@ -26,5 +26,4 @@ export default function (request, next) {
2626
}
2727
}
2828

29-
next();
3029
}

src/http/interceptor/form.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,13 @@
55
import Url from '../../url/index';
66
import {isObject, isFormData} from '../../util';
77

8-
export default function (request, next) {
8+
export default function (request) {
99

1010
if (isFormData(request.body)) {
11-
1211
request.headers.delete('Content-Type');
13-
1412
} else if (isObject(request.body) && request.emulateJSON) {
15-
1613
request.body = Url.params(request.body);
1714
request.headers.set('Content-Type', 'application/x-www-form-urlencoded');
1815
}
1916

20-
next();
2117
}

src/http/interceptor/header.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
import Http from '../index';
66
import {assign, each, toLower} from '../../util';
77

8-
export default function (request, next) {
8+
export default function (request) {
99

10-
var headers = assign({}, Http.headers.common,
10+
const headers = assign({}, Http.headers.common,
1111
!request.crossOrigin ? Http.headers.custom : {},
1212
Http.headers[toLower(request.method)]
1313
);
@@ -18,5 +18,4 @@ export default function (request, next) {
1818
}
1919
});
2020

21-
next();
2221
}

src/http/interceptor/json.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@
44

55
import {when, isObject} from '../../util';
66

7-
export default function (request, next) {
7+
export default function (request) {
88

9-
var type = request.headers.get('Content-Type') || '';
9+
const type = request.headers.get('Content-Type') || '';
1010

1111
if (isObject(request.body) && type.indexOf('application/json') === 0) {
1212
request.body = JSON.stringify(request.body);
1313
}
1414

15-
next(response => {
15+
return response => {
1616

1717
return response.bodyText ? when(response.text(), text => {
1818

19-
type = response.headers.get('Content-Type') || '';
19+
const type = response.headers.get('Content-Type') || '';
2020

2121
if (type.indexOf('application/json') === 0 || isJson(text)) {
2222

@@ -34,7 +34,7 @@ export default function (request, next) {
3434

3535
}) : response;
3636

37-
});
37+
};
3838
}
3939

4040
function isJson(str) {

src/http/interceptor/jsonp.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@
44

55
import jsonpClient from '../client/jsonp';
66

7-
export default function (request, next) {
7+
export default function (request) {
88

99
if (request.method == 'JSONP') {
1010
request.client = jsonpClient;
1111
}
1212

13-
next();
1413
}

src/http/interceptor/method.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@
22
* HTTP method override Interceptor.
33
*/
44

5-
export default function (request, next) {
5+
export default function (request) {
66

77
if (request.emulateHTTP && /^(PUT|PATCH|DELETE)$/i.test(request.method)) {
88
request.headers.set('X-HTTP-Method-Override', request.method);
99
request.method = 'POST';
1010
}
1111

12-
next();
1312
}

0 commit comments

Comments
 (0)