Switching to lodash's debounce
This commit is contained in:
463
dist/scorm-again.js
vendored
463
dist/scorm-again.js
vendored
File diff suppressed because one or more lines are too long
2
dist/scorm-again.js.map
vendored
2
dist/scorm-again.js.map
vendored
File diff suppressed because one or more lines are too long
39
dist/scorm-again.min.js
vendored
39
dist/scorm-again.min.js
vendored
File diff suppressed because one or more lines are too long
8
package-lock.json
generated
8
package-lock.json
generated
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "scorm-again",
|
||||
"version": "1.1.4",
|
||||
"version": "1.3.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
@@ -6535,6 +6535,12 @@
|
||||
"integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=",
|
||||
"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": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
"grunt-mocha-test": "^0.13.3",
|
||||
"jsdoc": "^3.6.4",
|
||||
"jsdoc-babel": "^0.5.0",
|
||||
"lodash.debounce": "^4.0.8",
|
||||
"minifyify": "^7.3.5",
|
||||
"minimist": "^1.2.5",
|
||||
"mocha": "^8.0.1",
|
||||
|
||||
@@ -4,6 +4,7 @@ import {ValidationError} from './exceptions';
|
||||
import ErrorCodes from './constants/error_codes';
|
||||
import APIConstants from './constants/api_constants';
|
||||
import {unflatten} from './utilities';
|
||||
import debounce from 'lodash.debounce';
|
||||
|
||||
const global_constants = APIConstants.global;
|
||||
const scorm12_error_codes = ErrorCodes.scorm12;
|
||||
@@ -920,31 +921,6 @@ export default class BaseAPI {
|
||||
'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
|
||||
* @param {string} url
|
||||
@@ -952,8 +928,7 @@ export default class BaseAPI {
|
||||
* @return {object}
|
||||
*/
|
||||
processHttpRequest(url: String, params) {
|
||||
const debounced = this._debounce(
|
||||
function(url, params, settings, error_codes) {
|
||||
const process = function(url, params, settings, error_codes) {
|
||||
const genericError = {
|
||||
'result': global_constants.SCORM_FALSE,
|
||||
'errorCode': error_codes.GENERAL,
|
||||
@@ -1014,9 +989,15 @@ export default class BaseAPI {
|
||||
}
|
||||
|
||||
return result;
|
||||
}, 5000);
|
||||
};
|
||||
|
||||
if (typeof debounce !== 'undefined') {
|
||||
const debounced = debounce(process, 5000);
|
||||
|
||||
return debounced(url, params, this.settings, this.error_codes);
|
||||
} else {
|
||||
return process(url, params, this.settings, this.error_codes);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user