【发布时间】:2019-09-07 23:25:27
【问题描述】:
当我创建一个 observable 并完成它时,我直接取消订阅它
const data$ = this.httpClient.get('https://jsonplaceholder.typicode.com/todos/1').subscribe(res => {
console.log('live', res);
data$.unsubscribe(); // <---- works fine
});
但是说如果我使用of 创建一个 Observable 并尝试做同样的事情
const obs$ = of(1).subscribe(e => {
console.log('test', e)
obs$.unsubscribe(); // <--- Problem while creating Observable by of
});
这两个 observables 有什么不同?
【问题讨论】:
-
of同步完成,因此您尝试在分配给obs$之前调用obs$.unsubscribe。 HTTP observable 将异步完成 - 在分配obs$之后。 -
我认为这很有道理。您可以将其发布为答案,以便我可以标记它
-
subscribe函数应该是 pure 并且不能引用函数范围之外的变量。您的两个示例都是具有副作用的 impure 函数。虽然您的问题是针对可观察的,但如果您在源代码的其他地方执行此操作,您将继续遇到错误。这是关于该主题的教程:ultimatecourses.com/blog/pure-versus-impure-functions
标签: node.js angular typescript ecmascript-6 rxjs