我有一个函数,我想将它订阅到事件队列。执行此功能时,我需要它取消订阅队列。
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
,这会被循环捕获。
我基本上需要订阅一个我通过参数传递指定的函数。执行该功能时,取消订阅。
希望我已经解释过这个。
答案 0 :(得分:0)
您不想直接调用该函数:
function f() { // the function to subscribe unsubscribes itself
// and calls the actual function
unsubscribe(f);
functionToExecute();
}
subscribe(f);