- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我对“dispose”或“unsubscribe”函数的目的感到困惑,它(可选)从可观察的“executor”函数返回,如下所示:
const Rx = require('rxjs');
const obs = Rx.Observable.create(obs => {
// we are in the Observable "executor" function
obs.next(4);
// we return this function, which gets called if we unsubscribe
return function () {
console.log('disposed');
}
});
const s1 = obs.subscribe(
function (v) {
console.log(v);
},
function (e) {
console.log(e);
},
function () {
console.log('complete');
}
);
const s2 = obs.subscribe(
function (v) {
console.log(v);
},
function (e) {
console.log(e);
},
function () {
console.log('complete');
}
);
s1.unsubscribe();
s2.unsubscribe();
让我感到困惑的是,这样的函数实际上更有可能保留代码中的引用,从而防止垃圾回收。
谁能告诉我在那种情况下返回函数的目的是什么,函数被调用的是什么,它的签名是什么?我无法找出有关它的信息。
我还看到了从执行函数返回订阅的更复杂的示例,例如:
let index = 0;
let obsEnqueue = this.obsEnqueue = new Rx.Subject();
this.queueStream = Rx.Observable.create(obs => {
const push = Rx.Subscriber.create(v => {
if ((index % obsEnqueue.observers.length) === obsEnqueue.observers.indexOf(push)) {
obs.next(v);
}
});
return obsEnqueue.subscribe(push);
});
这似乎返回了一个订阅,而不仅仅是一个简单的函数。谁能解释一下这是怎么回事?
为了明确问题,这样做有什么区别:
const sub = new Rx.Subject();
const obs = Rx.Observable.create($obs => {
$obs.next(4);
return sub.subscribe($obs);
});
并且不返回订阅调用的结果:
const sub = new Rx.Subject();
const obs = Rx.Observable.create($obs => {
$obs.next(4);
sub.subscribe($obs);
});
最佳答案
Rx.Observable.create
需要返回的unsubscribe
函数在下游不再监听流时被调用,有效地让你有时间清理资源。
关于您的问题; .subscribe()
返回您可以调用 .unsubscribe()
的订阅。因此,如果您想对其他订阅执行某些操作,您可以将该订阅通过管道传输到您的下游:
const obs = Rx.Observable.create($obs => {
const timer = Rx.Observable.interval(300)
.do(i => console.log('emission: ' + i))
return timer.subscribe($obs);
});
obs.take(4).subscribe(i => console.log('outer-emission:'+i))
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.2/Rx.js"></script>
如果没有取消订阅功能,您将停止收听可观察对象,但内部创建的间隔将继续运行:
const obs = Rx.Observable.create($obs => {
const timer = Rx.Observable.interval(300)
.do(i => console.log('emission: ' + i))
.take(10)
.subscribe(
val => $obs.next(val),
err => $obs.error(err),
() => $obs.complete()
);
return function(){} // empty unsubscribe function, internal subscription will keep on running
});
obs.take(4).subscribe(i => console.log('outer-emission:'+i))
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.2/Rx.js"></script>
关于javascript - "Unsubscribe"函数回调/Observable 中的钩子(Hook) "executor"函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41499889/
更新协程1.3.0-RC 工作版本: @FlowPreview suspend fun streamTest(): Flow = channelFlow { listener.onSomeRe
我想在我的服务发送的电子邮件的页脚中提供一个单击“取消订阅”链接。 显然,许多垃圾邮件扫描程序会扫描电子邮件,并会按照电子邮件中的任何链接扫描其内容中的恶意软件。到目前为止我使用的解决方法: 如果“取
我有一个 mailgun 帐户并一直用它来发送电子邮件。我启用了自动“取消订阅”功能,这样从我的帐户发送的所有电子邮件都会有“取消订阅”链接。 但是,我有一封电子邮件,我只想发送一次,并且希望禁用这封
ObjectUnsubscribedError: object unsubscribed,有时(不是每次)在文本框中输入任何值 HTML 组件.ts clearFilter(newValue) {
sub.unsubscribe 不删除 channel ,如何交替删除 channel ? 我尝试了 channel.close() 或 channel.quit() 但没有用! 代码: let ro
首次安装时,应用程序运行没有任何问题。 在启动画面检查登录状态。 用户未登录,导航到登录屏幕。 但 unsubscribe() 不是函数 当应用程序最小化然后重新打开时,错误显示并停留在启动画面。这只
我正在寻找一个发布/订阅系统,可以让我修改当前的订阅。我找不到任何东西,所以我想我应该构建自己的(用 JavaScript)。 我有发布和订阅的基本方法,如下所示: ps.publish(params
我有一台 Mac,使用 CoreBluetooth 作为 CBPeripheralManager 设置为蓝牙配件。 Mac 在一组特征 CBUUID 上做广告,一旦它有了订阅者,我就单击一个按钮,每半
我在收到可观察到的第一个项目后尝试取消订阅。而且这似乎行不通。我做错了什么? public class ObservableAndSubscriber { public static
您可能都知道需要取消订阅 Observables 以防止内存泄漏。 我不明白为什么不为使用 Observables 的组件类创建 @Uncsubscribe 装饰器,它将遍历所有属性并取消订阅 des
试图制作一个简单的计时器并且需要在某些if 条件下中断它。但总是出现错误 EXCEPTION: timer.unsubscribe is not a function。 我做错了什么? let
我正在尝试掌握 rxJS 中的订阅和可观察对象。 我想通过取消订阅来更改 Observable 的间隔,然后使用新的间隔设置重新订阅。 应该非常简单,但由于我是这方面的初学者,我可能需要一些帮助。 查
这个问题在这里已经有了答案: Difference between .unsubscribe to .take(1) (2 个答案) Angular/RxJS When should I unsub
我有一个依赖属性 (bool),它可以在文本框中启用行为。 属性更改回调订阅了一些事件处理程序: static void MyPropertyChanged(DependencyObject d, D
我使用Observable.create()创建一个可观察对象以在调度程序上执行一些工作(例如Schedulers.io(),然后在AndroidSchedulers.mainThread()上返回结
我想知道,在使用 unsubscribe 后,使用 .take(1) 和 .unsubscribe 之间的性能是否有任何差异订阅: var observable = Rx.Observable.int
我正在使用 ng2-stomp-service 订阅套接字: this.fooSubscription = this.stomp.subscribe('/topic/foo', (res) => {
我正在使用 ng2-stomp-service 订阅套接字: this.fooSubscription = this.stomp.subscribe('/topic/foo', (res) => {
我在 angular tutorial 中发现了奇怪的结构.返回部分发生了什么?代码块内的函数调用后跟空对象? // This function runs when subscribe() is ca
有没有一种方法可以编写单元测试来检查我是否已成功取消订阅我的 Observable 订阅? 我正在使用 ngx-auto-unsubscribe . 示例: @AutoUnsubscribe() @C
我是一名优秀的程序员,十分优秀!