我创建了一个演示(ng-run),其中有一个调用Http请求的按钮。单击按钮时,我调用此方法:publicgetData(){this._jokeService.getData().subscribe();}依次调用这个(从服务):publicgetData(){returnthis.http.get(API_ENDPOINT).pipe(shareReplay(1))}问题是每次点击-我仍然看到发起了一个新的http请求:问题:为什么shareReplay不保留响应的最后一个值?如何让我的代码仅调用一次http并为将来的订阅保留该值?编辑:solutionishere
我已经开始使用RxJS5,现在发现不再有shareReplay方法。很有可能我经常在RxJS4中误用shareReplay,但现在我正在努力获得我想要的行为,即:创建一个可观察对象订阅observable,observable产生一个值第二次订阅observable,我得到相同的第一个值Observable产生第二个值,两个订阅都得到第二个值我如何使用RxJS5实现它?总的来说,我认为我对RxJS的运算符理解得很好,但是整个冷、热、发布、连接对我来说都不太清楚。是否有一个很好的引用来说明如何找到我拥有的observable类型,以便我可以以合乎逻辑的方式找出为什么订阅没有获取值,或者为
所以我希望能够懒惰地订阅共享数据,而不会在没有人订阅时持续存在。然后如果有人再次订阅,将创建一个新的可观察对象。我会使用一个变量,但如果没有人订阅,我不希望它持续存在(因为如果我使用数组或大于int的东西,我不想将它们保留在内存中)。我当前的实现有效,除非重新订阅它仍然获得最后一个值,这意味着该值仍然存在。我正在考虑将observable设置为nil,但我不知道该在哪里做。谁能帮我完成这个?下面的代码显示它大部分工作正常,但看起来数据在没有人订阅的情况下仍然存在。varswitchTwoDisposable:Disposable?=nil@IBActionfuncswitchOneC
我看过RxSwift/ShareReplayScope.swift文件,但有点难以理解。publicfuncshare(replay:Int=0,scope:SubjectLifetimeScope=.whileConnected)->Observable{switchscope{case.forever:switchreplay{case0:returnself.multicast(PublishSubject()).refCount()default:returnself.multicast(ReplaySubject.create(bufferSize:replay)).refC