gpt4 book ai didi

javascript - 我应该在 BehaviorSubject 中使用 asObservable 吗?

转载 作者:行者123 更新时间:2023-12-03 16:47:15 25 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.


1年前关闭。


社区在 3 个月前审查了是否重新打开此问题并将其关闭:

原始关闭原因未解决






Improve this question




我想知道 BehaviorSubject 中以下代码中的两种方法是什么? .
我所知道的:

The asObservable method not only cast it to an Observable, it also removes the Observer implementation. Therefore you are not able to call next, error & complete on the instance returned by asObservable().


但以下内容也让我感到困惑:

By only exposing asObservable you can consume the values emitted but prevent from making changes to the BehaviorSubject from outside the service where this BehaviorSubject was created. For this reason use asObservable().


这些定义有什么问题吗?
export class DataService {

// usage I : using getter
private messageSubject = new BehaviorSubject<any>(undefined);

getMessage(): BehaviorSubject<any> {
return this.messageSubject;
}

setMessage(param: any): void {
this.messageSubject.next(param);
}


// usage II : using asObservable()
private messageSubject = new BehaviorSubject<any>(undefined);

currentMessage = this.messageSubject.asObservable();

setMessage(param: any) {
this.messageSubject.next(param)
}
}
上面哪种方法更好用,或者这两种方法的优缺点是什么?
更新:上次我最终确定了正确的用法,如下所示:
// usage III : using @martin's approach:
private messageSubject = new BehaviorSubject<any>(undefined);

public messages$: Observable<any> = this.messageSubject;

//should I set the observable still using the following method without any changing? Or do I need an update?
setMessage(param: any) {
this.messageSubject.next(param)
}

最佳答案

实际上,在 TypeScript 中这样做的推荐方法只是像这样进行类型转换:

private messageSubject = new BehaviorSubject<any>(undefined);

public messages$: Observable<any> = this.messageSubject;
这样一来,TypeScript 编译器就不会让你调用 next() , error()complete() .使用 asObservable()仅在纯 JavaScript 中使用 RxJS 时才推荐使用。例如,在 RxJS 源代码内部,它从不使用 asObservable()尽管它经常使用并公开 Subjects => Observables。
有关更多信息,请参阅讨论: https://github.com/ReactiveX/rxjs/pull/2408

关于javascript - 我应该在 BehaviorSubject 中使用 asObservable 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65121970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com