Ensure cancel resets lastCallTime and lastInvokeTime.

This commit is contained in:
John-David Dalton
2016-03-28 21:06:11 -07:00
parent 4fd43f7fe7
commit 4f92fb7007
2 changed files with 14 additions and 8 deletions

View File

@@ -9330,6 +9330,7 @@
if (timerId !== undefined) {
clearTimeout(timerId);
}
lastCallTime = lastInvokeTime = 0;
lastArgs = lastThis = timerId = undefined;
}
@@ -9338,17 +9339,20 @@
}
function debounced() {
var time = now(),
isInvoking = shouldInvoke(time);
lastArgs = arguments;
lastThis = this;
lastCallTime = now();
lastCallTime = time;
if (timerId === undefined) {
return leadingEdge(lastCallTime);
}
// Check times to handle invocations in a tight loop.
if (shouldInvoke(lastCallTime)) {
if (isInvoking) {
if (timerId === undefined) {
return leadingEdge(lastCallTime);
}
// Handle invocations in a tight loop.
clearTimeout(timerId);
timerId = undefined;
timerId = setTimeout(timerExpired, wait);
return invokeFunc(lastCallTime);
}
return result;

View File

@@ -21956,10 +21956,12 @@
assert.strictEqual(funced(), 1);
funced.cancel();
assert.strictEqual(funced(), 2);
funced();
setTimeout(function() {
assert.strictEqual(callCount, 2);
assert.strictEqual(callCount, 3);
done();
}, 64);
});