Switching to lodash's debounce

This commit is contained in:
Jonathan Putney
2020-06-29 17:45:34 -04:00
parent 5af069f2ef
commit 2a3f9b61af
6 changed files with 504 additions and 158 deletions
+408 -55
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+22 -17
View File
File diff suppressed because one or more lines are too long
+7 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "scorm-again", "name": "scorm-again",
"version": "1.1.4", "version": "1.3.0",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@@ -6535,6 +6535,12 @@
"integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=", "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=",
"dev": true "dev": true
}, },
"lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
"integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
"dev": true
},
"lodash.defaults": { "lodash.defaults": {
"version": "4.2.0", "version": "4.2.0",
"resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+1
View File
@@ -31,6 +31,7 @@
"grunt-mocha-test": "^0.13.3", "grunt-mocha-test": "^0.13.3",
"jsdoc": "^3.6.4", "jsdoc": "^3.6.4",
"jsdoc-babel": "^0.5.0", "jsdoc-babel": "^0.5.0",
"lodash.debounce": "^4.0.8",
"minifyify": "^7.3.5", "minifyify": "^7.3.5",
"minimist": "^1.2.5", "minimist": "^1.2.5",
"mocha": "^8.0.1", "mocha": "^8.0.1",
+9 -28
View File
@@ -4,6 +4,7 @@ import {ValidationError} from './exceptions';
import ErrorCodes from './constants/error_codes'; import ErrorCodes from './constants/error_codes';
import APIConstants from './constants/api_constants'; import APIConstants from './constants/api_constants';
import {unflatten} from './utilities'; import {unflatten} from './utilities';
import debounce from 'lodash.debounce';
const global_constants = APIConstants.global; const global_constants = APIConstants.global;
const scorm12_error_codes = ErrorCodes.scorm12; const scorm12_error_codes = ErrorCodes.scorm12;
@@ -920,31 +921,6 @@ export default class BaseAPI {
'The storeData method has not been implemented'); 'The storeData method has not been implemented');
} }
/**
* A debounce function to throttle calls to LMS commit API
*
* @param {function} func
* @param {number} wait
* @param {boolean} immediate
* @return {function(...[*]=)}
* @private
*/
_debounce(func, wait, immediate = false) {
let timeout;
return function(...args) {
const later = () => {
timeout = null; // added this to set same behaviour as ES5
// eslint-disable-next-line no-invalid-this
if (!immediate) func.apply(this, args); // this is called conditionally, just like in the ES5 version
};
const callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
// eslint-disable-next-line no-invalid-this
if (callNow) func.apply(this, args);
};
}
/** /**
* Send the request to the LMS * Send the request to the LMS
* @param {string} url * @param {string} url
@@ -952,8 +928,7 @@ export default class BaseAPI {
* @return {object} * @return {object}
*/ */
processHttpRequest(url: String, params) { processHttpRequest(url: String, params) {
const debounced = this._debounce( const process = function(url, params, settings, error_codes) {
function(url, params, settings, error_codes) {
const genericError = { const genericError = {
'result': global_constants.SCORM_FALSE, 'result': global_constants.SCORM_FALSE,
'errorCode': error_codes.GENERAL, 'errorCode': error_codes.GENERAL,
@@ -1014,9 +989,15 @@ export default class BaseAPI {
} }
return result; return result;
}, 5000); };
if (typeof debounce !== 'undefined') {
const debounced = debounce(process, 5000);
return debounced(url, params, this.settings, this.error_codes); return debounced(url, params, this.settings, this.error_codes);
} else {
return process(url, params, this.settings, this.error_codes);
}
} }
/** /**