2015-02-11 27 views
0

我正在使用debounce函數找到here in this stackoverflow post。這是允許限制請求的承諾。向全球範圍提供「此」的方式?

因爲調用請求的setTimeout調用似乎一次全部發送,所以防脫功能在某些原因嵌套在函數中時不起作用。它需要直接引用我認爲。

,因爲它需要直接引用

function bounced(item){ 
    return debounce(mockRequest, 800, 5)(item) 
} 

這是它應如何使用

var bounced = debounce(mockRequest, 800, 5) 

的問題是我創建的API對象,我不能做這樣的事情像這樣,任何選項都不會起作用

API.prototype.request = function(options){ 
    return this.debounce(this.makeRequest, 1000, 2)(options) 
} 

API.prototype.request = this.debounce(this.makeRequest, 1000, 2) // duh 

我正在尋找某種方式使用this而不直接調用去抖方法。

理想的情況下這樣的事情將是很好

API.prototype.request = function(){ 
    return this.debounce(this.makeRequest, 1000, 2) 
}() 

回答

2

我覺得應該是

API.prototype.request = API.prototype.debounce(API.prototype.makeRequest, 1000, 2) 

你有沒有一個實例(this),也創造了該方法的時間options對象。這些提供給debounced函數,在那裏它們被存儲,然後(可能稍後)用於調用提供的函數。

順便說一下,將debounce放置在您的API原型上可能沒有意義 - 它是一種通用的幫助方法,而不是實例方法。另外請注意,當你的原型方法debounce()全部你的通話將全球去抖。如果你想每個API實例有一個隊列,你最好做

function API() { 
    // in the constructor: 
    this.request = Helpers.debounce(this.makeRequest); 
} 
API.prototype.makeRequest = function() { … }; 
// no prototype .request() method 
+0

這樣做。我沒有意識到每個函數都會獨立保留它們的狀態。 – ThomasReggi 2015-02-11 16:55:05

+0

感謝您的第二個例子,我更新了我的代碼以反映這一點!謝謝! – ThomasReggi 2015-02-11 17:16:44

+2

@ThomasReggi我看到你在另一個答案上對我說了這個 - 我只想確認這個解決方案是正確的。這絕對是我打算如何使用它的。 \ – 2015-02-11 21:40:28