如果网络请求已关闭,我目前正在尝试取消订阅可观察的内容,以不再进一步传输数据。
我的可观察对象的创建方式为:
Observable.interval(1, TimeUnit.SECONDS)
.map { LocalDateTime.now() }.share()
因此有多个订阅者。但是我不知道如何在网络关闭的情况下退订。
我目前正在使用vert.x将具有服务器发送事件的数据流传输到客户端,如下所示:
flow.subscribe({
response.write("the current time is $it")
}, ::println, {
response.end()
})
如果我取消了来自客户端的请求,则可观察对象将继续“传输”数据。
感谢您的帮助
答案 0 :(得分:1)
您可以通过调用 dispose()
取消订阅Disposable disposable = flow.subscribe({
response.write("the current time is $it")
}, ::println, {
response.end()
})
disposable.dispose();
更新:可观察的自定义
val observable: Observable<LocalDateTime> = Observable.create { emitter ->
val timer = Timer()
timer.schedule(timerTask {
if (emitter.isDisposed) {//<-- cancel emmitting items if disposed
timer.cancel()
} else {
emitter.onNext(LocalDateTime.now())
}
}, 0, 1000)
}
disposable = observable.share().subscribe { t ->
System.out.println(" Hello World! $t");
disposable?.dispose()//<-- here calling dispose() causes observable to stop emitting items
}
答案 1 :(得分:0)
您可以将config/app.php
运算符与响应takeUntil
一起使用:
closeHandler