如何避免在每种类型上调用DB?

时间:2015-08-06 16:53:14

标签: javascript

我正在开发一个应用程序,其中用户有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来做,但是,还有其他更好的方法吗?

1 个答案:

答案 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。