diff --git a/lodash.js b/lodash.js index 3dfa6a60c..d8717e6fc 100644 --- a/lodash.js +++ b/lodash.js @@ -8652,7 +8652,7 @@ if (maxWait === false) { var leadingCall = leading && !timeoutId; } else { - if (!maxTimeoutId && !leading) { + if (!lastCalled && !maxTimeoutId && !leading) { lastCalled = stamp; } var remaining = maxWait - (stamp - lastCalled), diff --git a/test/test.js b/test/test.js index 7fdec12e8..36bbc5224 100644 --- a/test/test.js +++ b/test/test.js @@ -20635,6 +20635,30 @@ }); }); + QUnit.test('should trigger a second throttled call as early as possible when invoked repeatedly', function(assert) { + assert.expect(2); + + var done = assert.async(); + + var callCount = 0; + + var throttled = _.throttle(function() { + callCount++; + }, 128, { 'leading': false }); + + throttled(); + + setTimeout(function() { + assert.strictEqual(callCount, 1); + throttled(); + }, 192); + + setTimeout(function() { + assert.strictEqual(callCount, 2); + done(); + }, 288); + }); + QUnit.test('should apply default options', function(assert) { assert.expect(3);