- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道 asObservable
有什么用? :
根据文档:
An observable sequence that hides the identity of the source sequence.
但是为什么需要隐藏序列?
最佳答案
这样做的目的是防止从 API 中泄露主题的“观察者端”。基本上是为了防止当您不希望人们能够“下一步”进入结果可观察值时出现泄漏抽象。
(注意:这实际上不是将这样的数据源制作为 Observable 的方式,而是应该使用 new Observable
构造函数,请参见下文)。
const myAPI = {
getData: () => {
const subject = new Subject();
const source = new SomeWeirdDataSource();
source.onMessage = (data) => subject.next({ type: 'message', data });
source.onOtherMessage = (data) => subject.next({ type: 'othermessage', data });
return subject.asObservable();
}
};
现在,当有人从 myAPI.getData()
获取可观察结果时,他们无法将 next
值添加到结果中:
const result = myAPI.getData();
result.next('LOL hax!'); // throws an error because `next` doesn't exist
new Observable()
在上面的例子中,我们可能正在创建一些我们无意的东西。其一,getData()
不像大多数可观察对象那样是惰性的,它会立即创建底层数据源 SomeWeirdDataSource
(可能还有一些副作用)。这也意味着,如果您重试
或重复
生成的可观察值,它不会像您想象的那样工作。
最好将数据源的创建封装在可观察对象中,如下所示:
const myAPI = {
getData: () => return new Observable(subscriber => {
const source = new SomeWeirdDataSource();
source.onMessage = (data) => subscriber.next({ type: 'message', data });
source.onOtherMessage = (data) => subscriber.next({ type: 'othermessage', data });
return () => {
// Even better, now we can tear down the data source for cancellation!
source.destroy();
};
});
}
通过上面的代码,任何行为,包括使其“不懒惰”,都可以使用 RxJS 的现有运算符在可观察值之上进行组合。
关于rxjs - 何时在 rxjs 中使用 asObservable() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36986548/
我是 RxSwift 和 Reactive 编程的新手。这是我的代码: let disposeBag = DisposeBag() let dartScore = PublishSubject()
您好,我真的很质疑对主题调用“asObserveable()”的用法。 在我看来,它会产生大量不必要的开销。在我看来,阻止调用“next()”或“complete()”是没有用的。 你能给我一个你应该
我是 Angular2 的新手,我很想知道如果我在 _showNavBar 或 showNavBarEmitter 上订阅,两者都一样(见下面的代码 i正在使用)。有什么区别吗? public _sh
我想知道 asObservable 有什么用? : 根据文档: An observable sequence that hides the identity of the source sequenc
为什么 RxJava 需要 asObservable? 从技术上讲,每个主题都已经是一个可观察的。它比直接类型转换有什么优势 Observable obs = subject; 最佳答案 如果您只是将
标题 如果您基本上有相同的问题并且您的上下文是 Angular,您可能需要阅读答案中的所有评论以获得更多上下文。 这个问题的简短版本 在做 let observe$ = someReplaySubje
我正在尝试使用数据流 block ,我需要监视通过的项目以进行单元测试。 为了做到这一点,我使用了 AsObservable() ISourceBlock 上的方法我的TransformBlock ,
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 1年前关闭。 社区在 3 个月前审查了
我有一个问题希望你能帮助我。谢谢 升级到 Typescript 2.9.1 后,编译器提示没有返回方法应该返回的类型。 当前代码: public getCardPairingSession(sessi
我一直在使用这两种(完全相同的方法)来调用 throttleTime,但我不确定它们是否真的相同。 this.scrollSubject$ = new Subject(); this.scrollSu
我想观察我的BehaviourSubject。在 RxJava 1 中我调用了 asObservable() ,现在不见了。 我找到了 publish()但它返回可连接,这是我不想的。 如何在 RxJ
如果 Subject 继承自 Observable,那么基于任何 Subject 的下一个选项有什么区别,例如: private val locationSubject: ReplaySubject
在我的 Android 项目中,我使用 realm作为我的数据存储引擎。我喜欢它! 我也用 RxJava因为它使“线程化”变得容易得多,而且我真的很喜欢整个“响应式(Reactive)思维方式”。我喜
我正在学习 RxJs,我正在寻求对我的假设的确认或纠正。 我正在尝试在我可以在我的服务类的不同位置使用 .next() 的服务中使一个公共(public)只读可见。我想知道这是否是正确的方法: pri
我有服务: export class ConfigService { private _config: BehaviorSubject = new BehaviorSubject(null);
执行Enumerable.AsEnumerable(this IEnumerable source)简单地返回 source .然而Observable.AsObservable(this IObse
我的应用程序使用 RxJava 和 Realm DB。当我查询 Realm 中的数据并调用 Realm.asObservable() 时,RealmResult 发出 2 次。 public clas
在很多使用 RxJS 的代码库中,我似乎遇到了暴露私有(private) Subjects 的模式。如 Observables通过 getter或正常 getObservable()功能。我的问题不是
我无法理解 asObservable method 的基本原理和目的在 RxSwift 的 Observable class . /// A type-erased `ObservableType`.
我是一名初级开发人员,正在使用 Jest 作为单元测试框架来开发 React 应用程序 我必须测试我的 privateRoute 文件: export const PrivateRoute = ({
我是一名优秀的程序员,十分优秀!