用javascript编写一个函数队列
writing a function queue in javascript
我有一个对象,每分钟只能放置60个API调用。所以我想做的是,当一个函数调用来的时候,我知道我不被允许放置,把它添加到队列中,在更方便的时候再次调用这个函数。
这是我认为如何修复它
var API_caller = function(){
this.function_queue = [];
};
API_caller.prototype.make_api_call = function(){
if(this.can_make_call()){
this.make_call();
} else {
// If I cant place an API call then add
// the function to the function queue
this.function_queue.push(this.make_api_call);
}
};
API_caller.prototype.queue_call = function(){
// remove function from queue and call it
var func = this.function_queue.shift();
func();
}
这对于没有参数的函数很好,但是如果make_api_call()
有一个参数
API_caller.prototype.make_api_call = function(data){
if(this.can_make_call()){
this.make_call();
} else {
// If I cant place an API call then add
// the function to the function queue
this.function_queue.push(this.make_api_call(data));
}
};
然而,在这种情况下,make_api_call(data)
在被压入function_queue
之前将被求值,并且func
将不再持有导致queue_call()
出错的函数。
我怎样才能绕过这个?
您可以使用bind
将部分参数应用于函数:
this.function_queue.push(this.make_api_call.bind(this, data));
检查旧浏览器是否支持MDN
队列条目应该包含函数f
和参数数组p
。
当你添加到队列时,你可以使用类似queue.push ([f, arguments])
的格式当需要进行调用时,可以使用类似queue[0][0].apply (null, queue[0][1])
的格式
您可以将包含API调用的ad-hoc函数与已绑定的参数排队:
var that = this;
this.function_queue.push(function() {
that.make_api_call(data);
));
this
和that
的混叠是必需的,因为在匿名函数内部,this
不会绑定到与外部相同的对象。
请注意,该技术类似于eclanrs的答案,但不依赖于bind
方法的可用性。
相关文章:
- 我可以在json对象中添加一个函数吗
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在另一个函数中使用变量this
- 在另一个函数成功结束后调用该函数
- mongoose.connect undefined不是一个函数
- 监听器必须是一个函数
- 使用JS函数来使用另一个函数的语法?node.js
- 如何取消object.prototypes javascript的一个函数
- 从Chrome扩展名中的popup.html文件在background.js文件中运行一个函数
- 嵌套到另一个函数中的Fancybox函数;不起作用
- 如何在javascript中使用不止一个函数
- jQuery-在页面加载时执行一个函数
- jquery UI draggable:UI.children不是一个函数
- jQuery Mobile Undefined不是一个函数
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- JS异常:animate不是一个函数
- 如何将一个函数附加到一个不存在的元素上
- JavaScript/jQuery-添加添加和删除类与下一个函数之间的延迟