我正在开发一个应用程序,其中用户有2个输入,其中一个输入用户键入数字,而另一个输入则显示计算。因此,在用户在输入中键入的每个数字中,都有对DB的调用,我想避免这种情况。我想给出时间,因此用户可以输入输入,然后完成对DB的调用。
这是服务中的功能
applyStraightRisk = function(slip, amount) {
applyStraightRiskWin({
wagerType: '1',
riskOrWin: 'RISK',
riskValue: amount,
winValue: slip.win || 0,
amount: amount,
selections: [slip]
});
}, applyStraightWin = function(slip, amount) {
applyStraightRiskWin({
wagerType: '1',
riskOrWin: 'WIN',
riskValue: slip.risk,
winValue: amount,
amount: amount,
selections: [slip]
});
}
return {
riskWinCalculations: function(params, scope, index) {
switch (params.type) {
case 'RISKSTRAIGHT':
applyStraightRisk(params.slip, params.slip.risk);
break;
case 'WINSTRAIGHT':
applyStraightWin(params.slip, params.slip.win);
break;
};
}
我在考虑用$timeout/setTimeout
来做,但是,还有其他更好的方法吗?
答案 0 :(得分:1)
您可以使用underscore.js库中的'debounce'功能。
applyStraightRisk = _.debounce(function(slip, amount) {
...
}, 500); // Maximum run of once per 500 milliseconds
此功能的代码,如果您只需要它(来自underscore.js)
_.debounce = function(func, wait, immediate) {
var timeout, args, context, timestamp, result;
var later = function() {
var last = _.now() - timestamp;
if (last < wait && last >= 0) {
timeout = setTimeout(later, wait - last);
} else {
timeout = null;
if (!immediate) {
result = func.apply(context, args);
if (!timeout) context = args = null;
}
}
};
return function() {
context = this;
args = arguments;
timestamp = _.now();
var callNow = immediate && !timeout;
if (!timeout) timeout = setTimeout(later, wait);
if (callNow) {
result = func.apply(context, args);
context = args = null;
}
return result;
};
};
如您所见,它使用setTimeout。