Mar*_*oll 8 rxjs angularjs rxjs5 angular
在升级RxJS之前5.0.0-rc.0
我使用.cache()
了很多来在我的Angular应用程序中共享订阅.使用它的最大优点是任何新订阅都将获得最后发布的值.
RxJS团队决定删除它,现在我发现自己手动连接私人BehaviorSubject
或ReplaySubject
随后打电话.asObservable()
.考虑到我们之前必须采用的简单方法,这似乎是很多样板.
我错过了一些更简单的方法吗?我找不到.replay()
经营者,以及.share()
和.publishReplay()
运营商似乎并不做这一点.
谢谢!
这就是我用来炫耀RxJS的方法.以下示例缓存最新的模拟HTTP响应1秒.它基于RxJS多播通过publishReplay()
和refCount()
.
var counter = 1;
var updateTrigger = Observable.defer(() => mockDataFetch())
.publishReplay(1, 1000)
.refCount()
.take(1);
function mockDataFetch() {
return Observable.of(counter++)
.delay(100);
}
function mockHttpCache() {
return updateTrigger;
}
mockHttpCache().toPromise()
.then(val => console.log("Response from 0:", val));
setTimeout(() => mockHttpCache().toPromise()
.then(val => console.log("Response from 200:", val))
, 200);
setTimeout(() => mockHttpCache().toPromise()
.then(val => console.log("Response from 1200:", val))
, 1200);
setTimeout(() => mockHttpCache().toPromise()
.then(val => console.log("Response from 1500:", val))
, 1500);
setTimeout(() => mockHttpCache().toPromise()
.then(val => console.log("Response from 3500:", val))
, 3500);
Run Code Online (Sandbox Code Playgroud)
查看现场演示:https://jsbin.com/todude/3/edit?js,console
这打印到控制台:
Response 0: 1
Response 50: 1
Response 200: 1
Response 1200: 2
Response 1500: 2
Response 3500: 3
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4399 次 |
最近记录: |