This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/lib/debounce.js

52 lines
1.3 KiB
JavaScript

/**
Debounce a Javascript function. This means if it's called many times in a time limit it
should only be executed once (at the end of the limit counted from the last call made).
Original function will be called with the context and arguments from the last call made.
@method debounce
@module Discourse
@param {function} func The function to debounce
@param {Number} wait how long to wait
**/
Discourse.debounce = function(func, wait) {
var self, args;
var later = function() {
func.apply(self, args);
};
return function() {
self = this;
args = arguments;
Ember.run.debounce(null, later, wait);
};
};
/**
Debounce a javascript function that returns a promise. If it's called too soon it
will return a promise that is never resolved.
@method debouncePromise
@module Discourse
@param {function} func The function to debounce
@param {Number} wait how long to wait
**/
Discourse.debouncePromise = function(func, wait) {
var self, args, promise;
var later = function() {
func.apply(self, args).then(function (funcResult) {
promise.resolve(funcResult);
});
};
return function() {
self = this;
args = arguments;
promise = Ember.Deferred.create();
Ember.run.debounce(null, later, wait);
return promise;
};
};