我正在使用找到的debounce
函数here in this stackoverflow post。这是一个允许限制请求的承诺。
当debounce函数嵌套在函数中时,它会因某些原因无效,因为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)
}()
答案 0 :(得分: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