Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 淘汰具有多个订阅的单个可观察对象_Javascript_Knockout.js_Observable_Subscribe - Fatal编程技术网

Javascript 淘汰具有多个订阅的单个可观察对象

Javascript 淘汰具有多个订阅的单个可观察对象,javascript,knockout.js,observable,subscribe,Javascript,Knockout.js,Observable,Subscribe,我继承了一个使用Knockout为UI编写的应用程序,我很好奇对单个可观察属性进行多个订阅会产生什么影响 我有一个可观测的,有两个订阅。通过登录到控制台,我可以看到两个订阅都被一个接一个地激发 使用以下示例:(为了简洁起见,在完整的代码中有很多逻辑,其中一些是重复的) 我在想,我应该看到一些错误,因为有多个订阅,但一切似乎都很好,但我找不到任何明确的解释,为什么这样做是可以的 我只是想找出以下几点: 对一个可观察对象进行多个订阅是否正常且可接受? 是否有任何潜在的影响,即比赛条件可能? 是否真的

我继承了一个使用Knockout为UI编写的应用程序,我很好奇对单个可观察属性进行多个订阅会产生什么影响

我有一个可观测的,有两个订阅。通过登录到控制台,我可以看到两个订阅都被一个接一个地激发

使用以下示例:(为了简洁起见,在完整的代码中有很多逻辑,其中一些是重复的)

我在想,我应该看到一些错误,因为有多个订阅,但一切似乎都很好,但我找不到任何明确的解释,为什么这样做是可以的

我只是想找出以下几点:

对一个可观察对象进行多个订阅是否正常且可接受? 是否有任何潜在的影响,即比赛条件可能? 是否真的需要多个订阅才能实现单次订阅无法实现的功能

我知道这在细节上可能有点害羞,但我真的只是想了解knockout在幕后是如何做的,看看我是否应该重构这段代码。

允许多个观察者/订阅。简言之,设计模式的目的是:

  • 将变更与变更的影响分离
  • 允许变更产生任何任意影响
  • 所以,击倒是通过它的可见物来实现的

    var可观测=ko.可观测(“a”);
    可观察。订阅(函数(新值){
    console.log(“观察者1”,newValue)
    });
    可观察。订阅(函数(新值){
    console.log(“观察者2”,newValue)
    });
    可观察。订阅(函数(新值){
    console.log(“观察者3”,newValue)
    });
    可观察的(“b”);
    可观察的(“c”)
    
    允许多个观察者/订阅。简言之,设计模式的目的是:

  • 将变更与变更的影响分离
  • 允许变更产生任何任意影响
  • 所以,击倒是通过它的可见物来实现的

    var可观测=ko.可观测(“a”);
    可观察。订阅(函数(新值){
    console.log(“观察者1”,newValue)
    });
    可观察。订阅(函数(新值){
    console.log(“观察者2”,newValue)
    });
    可观察。订阅(函数(新值){
    console.log(“观察者3”,newValue)
    });
    可观察的(“b”);
    可观察的(“c”)
    
    的设计允许多个订阅。整个想法是首先将一个变化和它的影响解耦,然后使您能够产生任何数量的影响。柯在这方面并不奇怪。“竞争条件”几乎没有问题-JS将在单个线程中运行您的代码,并且一个observable将一个接一个地通知每个观察者。我看到,正如它们在一个线程中一样,它们将一个接一个地执行,以便第二个订阅可以根据执行第一个订阅所产生的更改进行操作,我理解正确了吗?的设计允许多个订阅。整个想法是首先将一个变化和它的影响解耦,然后使您能够产生任何数量的影响。柯在这方面并不奇怪。“竞争条件”几乎没有问题-JS将在单个线程中运行您的代码,并且一个observable将一个接一个地通知每个观察者。我看到,正如它们在一个线程中一样,它们将一个接一个地执行,以便第二个订阅可以根据执行第一个订阅所产生的更改进行操作,我理解对了吗?
    self.VisitDate = ko.observable();
    
    self.VisitDate.subscribe(function (newValue) {
        self.ListItemRemoved(removed);
    });   
    
    self.VisitDate.subscribe(function (newValue) {
        self.Basket.VisitDate(newValue);
    });