Timer
by Trae
HTML
<script src="//cdnjs.cloudflare.com/ajax/libs/knockout/2.3.0/knockout-min.js"></script>
<input id="txtEmployee" type="text" data-bind="value: queryText, valueUpdate: 'afterkeydown'" />
<input type="text" data-bind="value: queryText, valueUpdate: 'afterkeydown'" />
JavaScript
var vm = vm();
ko.applyBindings(vm, document.getElementById("#txtEmployee"));
function vm() {
var self = {},
keyTimer = delay(500),
//delay = Timer( 2000, "Timer, baby!" ),
queryText,
employees;
queryText = ko.observable();
employees = ko.observableArray([]);
queryText.subscribe(function (newValue) {
if (newValue.length > 1) {
keyTimer.reset();
keyTimer.promise()
.then(function () {
console.log('time');
});
}
});
return $.extend(self, {
queryText: queryText,
employees: employees
});
}
function delay(interval) {
var dfd = new $.Deferred(),
time;
return {
promise: getPromise,
reset: resetTimer
};
function getPromise(){
return dfd.promise();
}
function resetTimer() {
dfd.reject();
dfd = new $.Deferred();
clearTimeout(time);
time = setTimeout(dfd.resolve, interval);
}
}
function wait(interval, condition) {
var dfr = $.Deferred();
innerWait();
return dfr.promise();
function innerWait() {
if (!condition) {
setTimeout(dfr.resolve, interval);
return;
}
if (condition()) {
dfr.resolve();
} else {
setTimeout(innerWait, interval);
}
}
}