Skip to content

Commit bbff9cf

Browse files
committed
add $browser.$defer.cancel
NEEDS TESTS
1 parent 6075263 commit bbff9cf

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

src/Browser.js

+19-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ function Browser(window, document, body, XHR, $log) {
3535
var self = this,
3636
location = window.location,
3737
setTimeout = window.setTimeout,
38+
clearTimeout = window.clearTimeout,
39+
pendingDeferIds = {},
3840
lastLocationUrl;
3941

4042
self.isMock = false;
@@ -348,10 +350,26 @@ function Browser(window, document, body, XHR, $log) {
348350
*
349351
*/
350352
self.defer = function(fn, delay) {
353+
var timeoutId;
351354
outstandingRequestCount++;
352-
setTimeout(function() { completeOutstandingRequest(fn); }, delay || 0);
355+
timeoutId = setTimeout(function() {
356+
delete pendingDeferIds[timeoutId];
357+
completeOutstandingRequest(fn);
358+
}, delay || 0);
359+
pendingDeferIds[timeoutId] = true;
360+
return timeoutId;
353361
};
354362

363+
364+
self.defer.cancel = function(deferId) {
365+
if (pendingDeferIds[deferId]) {
366+
delete pendingDeferIds[timeoutId];
367+
clearTimeout(deferId);
368+
return true;
369+
}
370+
};
371+
372+
355373
//////////////////////////////////////////////////////////////
356374
// Misc API
357375
//////////////////////////////////////////////////////////////

src/angular-mocks.js

+18-1
Original file line numberDiff line numberDiff line change
@@ -153,15 +153,32 @@ function MockBrowser() {
153153
self.cookieHash = {};
154154
self.lastCookieHash = {};
155155
self.deferredFns = [];
156+
self.deferredNextId = 0;
156157

157158
self.defer = function(fn, delay) {
158159
delay = delay || 0;
159-
self.deferredFns.push({time:(self.defer.now + delay), fn:fn});
160+
self.deferredFns.push({time:(self.defer.now + delay), fn:fn, id: self.deferredNextId});
160161
self.deferredFns.sort(function(a,b){ return a.time - b.time;});
162+
return self.deferredNextId++;
161163
};
162164

165+
163166
self.defer.now = 0;
164167

168+
169+
self.defer.cancel = function(deferId) {
170+
var fnIndex;
171+
172+
forEach(self.deferredFns, function(fn, index) {
173+
if (fn.id === deferId) fnIndex = index;
174+
});
175+
176+
if (fnIndex) {
177+
self.deferredFns.splice(fnIndex, 1);
178+
}
179+
}
180+
181+
165182
self.defer.flush = function(time) {
166183
self.defer.now += (time || 0);
167184
while (self.deferredFns.length && self.deferredFns[0].time <= self.defer.now) {

0 commit comments

Comments
 (0)