- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个 Observable 来缓存它们的结果一段时间。这个例子很棒而且非常有用!!但是我无法为项目生产者设置超时。我试图在 mockDataFetch()
中使用超时运算符,但在第一个失败的项目之后,流无法恢复。如何实现带超时的mockDataFetch
?
这正是我所做的:
const Observable = Rx.Observable;
var counter = 1;
var updateRequest = Observable.defer(() => mockDataFetch())
.publishReplay(1, 1000)
.refCount();
function mockDataFetch() {
return Observable.of(counter++)
.delay(Math.floor((Math.random() * 100) + 1))
.timeout(50);
}
function mockHttpCache() {
return updateRequest
.take(1);
}
另一方面,如果在 mockDataFetch
中得到一个 Excpetion 会发生什么?我希望在下一个项目上(1000 毫秒后,如 publishReplay
方法中所定义),可观察对象会发出一个新项目。
最佳答案
我想我应该更新示例并添加这个用例,因为这是一种很常见的情况(无论如何,我很高兴你发现它有用!)。
当从 mockDataFetch()
返回的 Observable 发送错误/完成通知时,Subject 内部将其自身标记为已停止(参见解释 Rx.Subject loses events),因此它不会重新发送任何项目。理想情况下,您可以使用 mockDataFetch()
中的 catch()
运算符捕获所有错误:
function mockDataFetch() {
return Observable.of(counter++)
.delay(Math.floor((Math.random() * 100) + 1))
.timeout(50)
.catch(err => Observable.of('This request is broken.'));
}
查看现场演示:https://jsbin.com/jiguti/5/edit?js,console
此示例的输出可能如下所示:
Response 0: This request is broken.
Response 50: This request is broken.
Response 200: This request is broken.
Response 1200: 2
Response 1500: 2
Response 3500: This request is broken.
关于javascript - 如何通过 `.publishReplay()` 在具有缓存的 RxJS Observable 上设置超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41813865/
我正在做一个 Angular 项目,但我不完全理解为什么这段代码没有按预期工作: const httpObs = Rx.Observable.of("") .do(() => console.lo
我已经知道了 publish 共享一个订阅并返回一个 ConnectableObservable(因此我们必须 Connect()) Share() 是 publish().refcount() Re
我正在 Angular 应用程序中实现缓存 HTTP 结果。据我所知,以下两个代码都有效,但我需要知道它们是否在做完全相同的事情,还是我遗漏了一些重要的东西? 最后发布 getPosts() {
我创建了一个 Observable 来缓存它们的结果一段时间。这个例子很棒而且非常有用!!但是我无法为项目生产者设置超时。我试图在 mockDataFetch() 中使用超时运算符,但在第一个失败的项
为什么 publishReplay(1).refCount() 不为迟到的订阅者重播最后一个值? a = new Rx.Subject(); b = a.publishReplay(1).refCou
我的用例是这样的:我使用 websocket 连接到服务,并从服务中获取定期(但不可预测)的健康数据。该应用程序可能有此数据流的多个用户,因此我想共享它。新订阅者应该看到最近发布的健康数据。当没有更多
我是一名优秀的程序员,十分优秀!