aboutsummaryrefslogtreecommitdiffstats
path: root/src/Browser.js
diff options
context:
space:
mode:
authorAndres Ornelas2010-05-26 15:21:58 -0700
committerAndres Ornelas2010-05-26 15:21:58 -0700
commitaedf12f25e42877a302a99d906e6397bde01dcce (patch)
treefd6ac4fe05668128937261093752b36c1bb02a6a /src/Browser.js
parent0d41c86522ef912fe5bb7a02fd434080f9827c00 (diff)
downloadangular.js-aedf12f25e42877a302a99d906e6397bde01dcce.tar.bz2
added outstanding request queue
Diffstat (limited to 'src/Browser.js')
-rw-r--r--src/Browser.js31
1 files changed, 29 insertions, 2 deletions
diff --git a/src/Browser.js b/src/Browser.js
index 8abdbc61..0e265c0c 100644
--- a/src/Browser.js
+++ b/src/Browser.js
@@ -8,6 +8,7 @@ function Browser(location, document) {
this.urlListeners = [];
this.hoverListener = noop;
this.isMock = false;
+ this.outstandingRequests = { count: 0, callbacks:[]};
this.XHR = window.XMLHttpRequest || function () {
try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e1) {}
@@ -57,16 +58,42 @@ Browser.prototype = {
callback = post;
post = null;
}
- var xhr = new this.XHR();
+ var xhr = new this.XHR(),
+ self = this;
xhr.open(method, url, true);
+ this.outstandingRequests.count ++;
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
- callback(xhr.status || 200, xhr.responseText);
+ try {
+ callback(xhr.status || 200, xhr.responseText);
+ } finally {
+ self.outstandingRequests.count--;
+ self.processRequestCallbacks();
+ }
}
};
xhr.send(post || '');
},
+ processRequestCallbacks: function(){
+ if (this.outstandingRequests.count === 0) {
+ while(this.outstandingRequests.callbacks.length) {
+ try {
+ this.outstandingRequests.callbacks.pop()();
+ } catch (e) {
+ }
+ }
+ }
+ },
+
+ notifyWhenNoOutstandingRequests: function(callback){
+ if (this.outstandingRequests.count === 0) {
+ callback();
+ } else {
+ this.outstandingRequests.callbacks.push(callback);
+ }
+ },
+
watchUrl: function(fn){
this.urlListeners.push(fn);
},