2013-09-27 40 views
0

我正在尋找一種方法來調用不同的函數,如果它快速連續調用。儘管第一次通話需要儘快完成。處理快速連續的函數調用 - Javascript/underscore.js/node.js

到目前爲止,我已經試過_.throttle_.debounceUnderscore.js來處理,這幾乎是我所期待的,但不完全。我可以延遲這些函數的調用,但是當多次調用一次發生時,我想調用一個完全不同的函數。

這是可能的,或者

例如:

var _ = require("underscore")._; 

function foo(){ 
    console.log("foo"); 
} 

function bar(){ 
    console.log("bar"); 
} 

var delayedFoo = _.throttle(foo, 1000); 

,而不是扼殺我想FOO()被調用一次,然後杆()指定的時間,FOO(前)可以再次調用:

var delayedFoo = _.route(foo, bar, 1000); 

是否有一個庫或框架具有這樣的內置函數?

+0

所以你要求一共有兩個函數的每個「循環」呼籲('foo',然後'酒吧',等待1000毫秒,重新開始),還是別的什麼?只是想確保我明白:) –

+0

你想遏制或反彈(即在每次通話或從第一次通話開始算起的時間之後切換回「foo」)? – Bergi

+0

@Bergi我想在等待期過後回到foo。 –

回答

1

是否有一個庫或框架具有這樣的內置函數?

我不知道任何,但它應該是微不足道的自己動手編程:

function route(hard, weak, period) { 
    var isThrottled = false; 
    return function() { 
     if (isThrottled) { 
      return weak.apply(this, arguments); 
     } else { 
      isThrottled = true; 
      setTimeout(function() { 
       isThrottled = false; 
      }, period); 
      return hard.apply(this, arguments); 
     } 
    }; 
} 
+0

我正在測試它,它似乎工作正常!謝謝,現在我甚至不需要使用Underscore.js。你能解釋一下應用程序在這裏做什麼嗎?如果兩個函數都有參數,是否需要? –

+0

['apply'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply)在同一[context](https://)中調用函數developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this)和相同的[參數](https://developer.mozilla.org/en-US/docs/Web/JavaScript/ Reference/Functions_and_function_scope/arguments)作爲'route'd函數。 – Bergi

+0

這真的很有用,像Python或Ruby等其他語言中存在這樣的事情嗎? –