Changeset 468 for Dev/trunk/src/client/qed-client/request.js
- Timestamp:
- 06/26/13 21:17:41 (12 years ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
Dev/trunk/src/client/qed-client/request.js
r464 r468 1 1 define([ 2 "./session", 2 3 "dojo/Deferred", 4 "dojo/on", 3 5 "dojo/request" 4 ], function( Deferred, request) {6 ], function(session, Deferred, on, request) { 5 7 6 var authenticated = true;8 var user = session.get(); 7 9 var queue = []; 8 10 11 on(session, 'change', function(newUser) { 12 user = newUser; 13 if ( user ) { 14 retry(); 15 } 16 }); 17 18 function retry() { 19 if (queue.length > 0) { 20 var item = queue.shift(); 21 console.log("Retry",item.url); 22 real_request(item); 23 } 24 } 25 26 function real_request(item) { 27 var req = request(item.url,item.options); 28 29 // forward successfull response 30 req.then(function(body){ 31 item.dfd.resolve(body); 32 }); 33 34 // handle unauthenticated and queued requests 35 req.response.then(function(response){ 36 retry(); 37 }, function(error) { 38 if ( error.response.status === 401 ) { 39 queue.unshift(item); 40 session.restore(); 41 } else { 42 item.dfd.reject(error); // this should be error body 43 // not, the request? 44 retry(); 45 } 46 }); 47 } 48 9 49 var _request = function(url, options) { 10 var dfd = new Deferred(); 11 if ( authenticated ) { 12 var req = request(url,options); 50 var item = { 51 url: url, 52 options: options, 53 dfd: new Deferred() 54 }; 55 // only do the request directly if we are authenticated and 56 // there are no earlier requests queued. 57 if ( user && queue.length === 0 ) { 58 console.log("Request",url); 59 real_request(item); 60 } else { 61 console.log("Push",url); 62 queue.push(item); 63 } 64 return item.dfd.promise; 65 }; 13 66 14 // forward successfull response15 req.then(function(data){16 dfd.resolve(data);17 });18 19 req.response.then(function(response){20 // if we are recovering, launch other requests21 }, function(error) {22 if ( error.response.status === 401 ) {23 queue.push({24 url: url,25 options: options,26 dfd: dfd27 });28 console.log("Retry goes here :)");29 } else {30 dfd.reject(error);31 }32 });33 } else {34 queue.push({35 url: url,36 options: options,37 dfd: dfd38 });39 }40 return dfd.promise;41 };42 67 return _request; 43 68 });
Note: See TracChangeset
for help on using the changeset viewer.