订阅和取消订阅包含对其他函数的调用的函数

时间:2012-03-14 16:37:23

标签: javascript

我有一个函数,我想将它订阅到事件队列。执行此功能时,我需要它取消订阅队列。

functionToExecute是我想要执行的功能。

onDOMReady订阅attachDOMHandler函数,后者又执行functionToExecute并取消订阅。我有:

onDOMReady : function(functionToExecute){
        subscribe(this.attachDOMHandler(functionToExecute));
    },
attachDOMHandler : function(functionToExecute) {
        unsubscribe(this.attachDOMHandler(functionToExecute));
        functionToExecute();
    }

当我有以下内容时,一切正常:

onDOMReady : function(functionToExecute){
        subscribe(functionToExecute, this, true);
    },

但是我需要在执行后取消订阅功能。我的计划是使用执行该功能的attachDOMHandler函数并具有取消订阅行为。 当我运行前者时,我在Chrome控制台中获得"Uncaught RangeError: Maximum call stack size exceeded"。它似乎陷入了一个无限循环,这是有道理的,因为我继续在取消订阅中运行attachDOMHandler,这会被循环捕获。 我基本上需要订阅一个我通过参数传递指定的函数。执行该功能时,取消订阅。 希望我已经解释过这个。

1 个答案:

答案 0 :(得分:0)

您不想直接调用该函数:

function f() { // the function to subscribe unsubscribes itself
               // and calls the actual function
  unsubscribe(f);
  functionToExecute();
}

subscribe(f);