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中限制值更新的方式。但是,这里的限制应用于更改通知。