0

1 分間に 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_queuefuncなる関数を保持しなくなりqueue_call()ます。

どうすればこれを回避できますか?

4

3 に答える 3

0

キュー エントリには、関数fと配列としてのパラメータが含まれている必要がありますp

キューに追加すると、次のようqueue.push ([f, arguments])になり、その呼び出しを行う時が来ると、次のようになりますqueue[0][0].apply (null, queue[0][1])

于 2013-06-16T05:45:43.100 に答える
0

引数が既にバインドされている API 呼び出しを含むアドホック関数をキューに入れることができます。

var that = this;
this.function_queue.push(function() {
    that.make_api_call(data);
));

無名関数の内部では、外部と同じオブジェクトにバインドされないため、 thistoのエイリアシングが必要です。thatthis

この手法は elanrs の回答に似ていますが、bindメソッドの可用性に依存しないことに注意してください。

于 2013-06-16T05:46:27.270 に答える