在重新执行之前从Observable获取值


一腔诗意喂了狗
2025-03-07 12:37:15 (17天前)


我目前正在以这种方式获得新的更新用户值:

this.Service.user $ .subscribe(data => {
this.userData = data;
this.userId = data._id;
});
但updateUser只是……

3 条回复
  1. 0# 不浪漫罪名 | 2019-08-31 10-32



    您在服务中可以做的是在内部使用BehaviourSubject
    存储值但将其公开为Observable。



    以下是详细介绍BehaviourSubject内容的文档的引用




    Subjectsubject的一个变体是BehaviorSubject,它具有“当前值”的概念。
    它存储了发给消费者的最新价值
    每当新的Observer订阅时,它将立即从BehaviorSubject接收“当前值”




    看到

    这里

    更多。



    服务代码:




    1. private _user$: BehaviourSubject(null); // initially null

    2. constructor(private http: HttpClient, private router: Router) {
      this.userChangeSet.subscribe(val => this._user$.next(val))
      }

    3. get user$ () {
      return this._user$.asObservable();
      }

    4. </code>


    然后,您可以像在组件中一样使用它。




    1. this.service.user$.subscribe(v => {
      // do stuff here
      })

    2. </code>


    注意第一个值
    组件将获得将为null,因为这是初始值
    行为主题。




    编辑:
    </强>



    在组件中




    1. private _destroyed$ = new Subject();

    2. public ngOnDestroy (): void {
      this._destroyed$.next();
      this._destroyed$.complete();
      }

    3. </code>


    然后是订阅




    1. this.service.user$.pipe(
      takeUntil(this._destroyed$)
      ).subscribe(v => {
      // do stuff here
      })

    2. </code>


    这种方法的工作方式是,当被破坏的$主体发出时,已经发出管道的观察者

    takeUntil(this._destroyed$)

    将取消订阅各自的来源。


  2. 1# 十二* | 2019-08-31 10-32



    对于userChangeSet使用BehaviorSubject。它会在订阅后立即发出价值。
    例:




    1. userChangeSet = new BehaviorSubject(this.currentData);

    2. </code>

登录 后才能参与评论