1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | (function (define) {
|
10 | 'use strict';
|
11 |
|
12 | define(function (require) {
|
13 |
|
14 | var interceptor, when;
|
15 |
|
16 | interceptor = require('../interceptor');
|
17 | when = require('when');
|
18 |
|
19 | |
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 | return interceptor({
|
29 | init: function (config) {
|
30 | config.timeout = config.timeout || 0;
|
31 | config.transient = !!config.transient;
|
32 | return config;
|
33 | },
|
34 | request: function (request, config) {
|
35 | var timeout, abortTrigger, transient;
|
36 | timeout = 'timeout' in request ? request.timeout : config.timeout;
|
37 | transient = 'transient' in request ? request.transient : config.transient;
|
38 | if (timeout <= 0) {
|
39 | return request;
|
40 | }
|
41 | abortTrigger = when.defer();
|
42 | this.timeout = setTimeout(function () {
|
43 | abortTrigger.reject({ request: request, error: 'timeout' });
|
44 | if (request.cancel) {
|
45 | request.cancel();
|
46 | if (transient) {
|
47 |
|
48 | request.canceled = false;
|
49 | }
|
50 | }
|
51 | else if (!transient) {
|
52 | request.canceled = true;
|
53 | }
|
54 | }, timeout);
|
55 | return new interceptor.ComplexRequest({ request: request, abort: abortTrigger.promise });
|
56 | },
|
57 | response: function (response) {
|
58 | if (this.timeout) {
|
59 | clearTimeout(this.timeout);
|
60 | delete this.timeout;
|
61 | }
|
62 | return response;
|
63 | }
|
64 | });
|
65 |
|
66 | });
|
67 |
|
68 | }(
|
69 | typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); }
|
70 |
|
71 | ));
|