Javascript 将多个淘汰订阅整理为单个通知?
在淘汰赛中,您可以执行以下操作:Javascript 将多个淘汰订阅整理为单个通知?,javascript,knockout.js,observable,Javascript,Knockout.js,Observable,在淘汰赛中,您可以执行以下操作: ko.obsgroup = function() { var groupManager = {}; var observables = []; var throttle = 0; var throttleTimeout; for(var i = 0; i < arguments.length; i++) { observables.push(arguments[i]); }
ko.obsgroup = function() {
var groupManager = {};
var observables = [];
var throttle = 0;
var throttleTimeout;
for(var i = 0; i < arguments.length; i++) {
observables.push(arguments[i]);
}
groupManager.throttle = function(duration) {
throttle = duration;
return groupManager;
};
groupManager.subscribe = function(handler) {
function throttledHandler(val) {
if(throttle > 0) {
if(!throttleTimeout) {
throttleTimeout = setTimeout(function() {
throttleTimeout = undefined;
handler(val);
}, throttle);
}
} else {
handler(val);
}
}
for(var i = 0; i < arguments.length; i++) {
observables[i].subscribe(throttledHandler);
}
return groupManager;
};
return groupManager;
};
myObservable.subscribe(函数(newValue){doSomething();})代码>
现在,如果我想订阅多个观测值,我可以:
myObservable1.subscribe(函数(){doSomething();});
myObservable2.subscribe(函数(){doSomething();});
然而,当我有很多订阅时,这可能会有点难看,而且如果你想限制当前的更新机制,你必须按订阅进行更新
那么,有没有一种方法可以让我用某种方式来包装它们呢?i、 e
ko.subscribeToMany(myObservable1,myObservable2)
.油门(500)
.subscribe(函数(){doSomething()});
我有一个场景,我基本上想根据变化刷新图表,而且它需要大量资源,因此,我希望不必订阅每个动态数据位,我可以将它们整理成一个单一的计算式订阅,然后从那里限制单个订阅,因为其他订阅可能希望立即收到通知,而不需要延迟/限制
那么,使用敲除功能是否可以实现上述功能?快速实现方法如下:
ko.obsgroup = function() {
var groupManager = {};
var observables = [];
var throttle = 0;
var throttleTimeout;
for(var i = 0; i < arguments.length; i++) {
observables.push(arguments[i]);
}
groupManager.throttle = function(duration) {
throttle = duration;
return groupManager;
};
groupManager.subscribe = function(handler) {
function throttledHandler(val) {
if(throttle > 0) {
if(!throttleTimeout) {
throttleTimeout = setTimeout(function() {
throttleTimeout = undefined;
handler(val);
}, throttle);
}
} else {
handler(val);
}
}
for(var i = 0; i < arguments.length; i++) {
observables[i].subscribe(throttledHandler);
}
return groupManager;
};
return groupManager;
};
#
演示:您需要newValue
参数还是只想得到通知?在这种情况下,我不关心newValue,我只想知道基础数据何时发生了更改。然而,我相信在这种情况下,其他人可能需要访问已经改变的观测值,但我们暂时不要让这一点复杂化。啊,所以你基本上是在外部包装订阅,然后只在某个节流阀后授权。除非有人提出更好的方法,否则现在我会给你答案。这也是在knockout中限制值更新的方式。但是,这里的限制应用于更改通知。