Javascript 如何在一起调用多个订阅的变量时只调用一次函数
这不是一个具体的技术问题,但我很好奇,解决这样一个问题的最佳方法是什么?尽管我在淘汰赛中遇到了这个问题,但我确信这个用例在其他地方也是有效的 假设我订阅了两个变量,Javascript 如何在一起调用多个订阅的变量时只调用一次函数,javascript,knockout.js,observer-pattern,observable,Javascript,Knockout.js,Observer Pattern,Observable,这不是一个具体的技术问题,但我很好奇,解决这样一个问题的最佳方法是什么?尽管我在淘汰赛中遇到了这个问题,但我确信这个用例在其他地方也是有效的 假设我订阅了两个变量,simpleObserve1,simpleObserve2,这样每当它们的值更改时,它们都会调用一个函数resetAllValues() 这里有两个问题 调用resetAllValues()时,它会将所有订阅的值更改为0,包括simpleObserve1和simpleObserve2。这依次调用resetAllValues()。如何防
simpleObserve1
,simpleObserve2
,这样每当它们的值更改时,它们都会调用一个函数resetAllValues()
这里有两个问题
simpleObserve1
和simpleObserve2
。这依次调用resetAllValues()
。如何防止它进入无限循环resetAllValues()
,该怎么办我曾尝试使用该方法来帮助我,但我想知道是否有更好的方法来做到这一点。我创建了一个高阶函数
acceptXParams
,该函数将检查参数的数量是否等于fn.length
或任意数。如果不是,则不会调用原始函数:
函数acceptXParams(fn,numoparams){
var numoparams=numoparams==未定义?fn.length:numoparams;
返回函数(){
if(arguments.length!==numoparams){
返回;
}
返回fn.apply(fn,参数);
}
}
/**范例**/
函数和(a,b,c){
返回a+b+c;
}
var sum3=接受参数(总和);
console.log(sum3(1,2,3));
console.log(sum3(1,2));
日志(sum3(1,2,3,4))代码>可能会帮助您。通过在计算结果中使用可观察值,knockout创建了一个订阅。通过扩展此计算,快速后续的变化被合并到某种微任务中
它们阻止了循环行为,但仍不清楚触发了多少更新。即:当设置为5
和10
时,会导致1或2次计算更新。所以我不确定这是否能回答你的问题
var i=0,
simpleObserve1=ko.observable(0),//初始值
simpleObserve2=ko.可观测(0);//初始值
ko.computed(函数resetAllValues(){
log(“设置”++i+”,在“:”之前);
log(“1:,simpleObserve1());
log(“2:,simpleObserve2());
simpleObserve1(0);
simpleObserve2(0);
log(“设置”+i+”,在“:”之后);
log(“1:,simpleObserve1());
log(“2:,simpleObserve2());
}).延伸({
延期:对
});
simpleObserve1(5);//值在代码中的任意位置更改
simpleObserve2(10);//代码中任意位置的值已更改
.as控制台包装{最小高度:100%;}
var simpleObserve1 = ko.observable(0), // initial values
simpleObserve2 = ko.observable(0); // initial values
var resetAllValues = function resetAllValues() {
/* this function takes all observable values and resets them */
{...}
}
simpleObserve1.subscribe(function(){
resetAllValues();
});
simpleObserve2.subscribe(function(){
resetAllValues();
});
simpleObserve1(5); // value changed anywhere in code
simpleObserve2(10); // value changed anywhere in code