mirror of
https://github.com/discourse/discourse.git
synced 2024-11-23 08:09:33 +08:00
refactors Discourse.debouncePromise
This commit is contained in:
parent
aef4227073
commit
4c4a2f220e
|
@ -47,25 +47,20 @@ Discourse.debounce = function(func, wait) {
|
|||
@param {Number} wait how long to wait
|
||||
**/
|
||||
Discourse.debouncePromise = function(func, wait) {
|
||||
var timeout = null;
|
||||
var args = null;
|
||||
var context = null;
|
||||
var self, args, promise;
|
||||
var later = function() {
|
||||
func.apply(self, args).then(function (funcResult) {
|
||||
promise.resolve(funcResult);
|
||||
});
|
||||
};
|
||||
|
||||
return function() {
|
||||
context = this;
|
||||
var promise = Ember.Deferred.create();
|
||||
self = this;
|
||||
args = arguments;
|
||||
promise = Ember.Deferred.create();
|
||||
|
||||
if (!timeout) {
|
||||
timeout = Em.run.later(function () {
|
||||
timeout = null;
|
||||
func.apply(context, args).then(function (y) {
|
||||
promise.resolve(y);
|
||||
});
|
||||
}, wait);
|
||||
}
|
||||
Ember.run.debounce(null, later, wait);
|
||||
|
||||
return promise;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -49,14 +49,17 @@ test("executes only once, no matter how many times debounced function is called
|
|||
originalAndCallbackFiredOnce("(second call was supressed)");
|
||||
});
|
||||
|
||||
test("does not prolong the timeout when the debounced function is called for the second time during the timeout", function() {
|
||||
test("prolongs the timeout when the debounced function is called for the second time during the timeout", function() {
|
||||
debounced().then(callback);
|
||||
|
||||
clock.tick(50);
|
||||
debounced().then(callback);
|
||||
|
||||
clock.tick(50);
|
||||
originalAndCallbackFiredOnce("exactly at the end of the original timeout");
|
||||
nothingFired("at the end of the original timeout");
|
||||
|
||||
clock.tick(50);
|
||||
originalAndCallbackFiredOnce("exactly at the end of the prolonged timeout");
|
||||
});
|
||||
|
||||
test("preserves last call's context and params when executing delayed function", function() {
|
||||
|
|
Loading…
Reference in New Issue
Block a user