From fbdadec5e59a92c57b57fe425d379ad59a3a7e1d Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Tue, 12 Jun 2012 23:45:06 -0400 Subject: [PATCH] Add `_.throttle` unit test for recursive calls. Former-commit-id: 7208516b56905c83df73aef6b02cee0101602349 --- doc/README.md | 2 +- lodash.js | 8 ++++---- test/test.js | 22 ++++++++++++++++++++-- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/doc/README.md b/doc/README.md index f17a7d9f4..b776a9db6 100644 --- a/doc/README.md +++ b/doc/README.md @@ -2221,7 +2221,7 @@ _.template('<%= data.hasWith %>', { 'hasWith': 'no' }, { 'variable': 'data' }); ### `_.throttle(func, wait)` # [Ⓢ](https://github.com/bestiejs/lodash/blob/v0.3.1/lodash.js#L2174 "View in source") [Ⓣ][1] -Creates a new function that, when executed, will only call the `func` function at most once per every `wait` milliseconds. If the throttled function is invoked more than once, `func` will also be called on the trailing edge of the `wait` timeout. Subsequent calls to the throttled function will return the result of the last `func` call. +Creates a new function that, when executed, will only call the `func` function at most once per every `wait` milliseconds. If the throttled function is invoked more than once during the `wait` timeout, `func` will also be called on the trailing edge of the timeout. Subsequent calls to the throttled function will return the result of the last `func` call. #### Arguments 1. `func` *(Function)*: The function to throttle. diff --git a/lodash.js b/lodash.js index 43ddcb208..c531b1185 100644 --- a/lodash.js +++ b/lodash.js @@ -2155,10 +2155,10 @@ /** * Creates a new function that, when executed, will only call the `func` - * function at most once per every `wait` milliseconds. If the throttled function - * is invoked more than once, `func` will also be called on the trailing edge - * of the `wait` timeout. Subsequent calls to the throttled function will - * return the result of the last `func` call. + * function at most once per every `wait` milliseconds. If the throttled + * function is invoked more than once during the `wait` timeout, `func` will + * also be called on the trailing edge of the timeout. Subsequent calls to the + * throttled function will return the result of the last `func` call. * * @static * @memberOf _ diff --git a/test/test.js b/test/test.js index 764d4d311..78711a495 100644 --- a/test/test.js +++ b/test/test.js @@ -642,6 +642,23 @@ } ok(counter > 1); }); + + asyncTest('supports recursive calls', function() { + var counter = 0; + var throttled = _.throttle(function() { + counter++; + if (counter < 4) { + throttled(); + } + }, 100); + + setTimeout(function() { + ok(counter > 1); + QUnit.start(); + }, 220); + + throttled(); + }); }()); /*--------------------------------------------------------------------------*/ @@ -790,6 +807,7 @@ /*--------------------------------------------------------------------------*/ // explicitly call `QUnit.start()` for Narwhal, Rhino, and RingoJS - QUnit.start(); - + if (!window.document) { + QUnit.start(); + } }(typeof global == 'object' && global || this));