Javascript 在重新执行之前从可观察值中获取值

Javascript 在重新执行之前从可观察值中获取值,javascript,angular,service,observable,Javascript,Angular,Service,Observable,Im当前通过以下方式获取新的更新用户值: this.Service.user$.subscribe(data => { this.userData = data; this.userId = data._id; }); 但是updateUser仅每5秒执行一次 因此,在加载之前,userData和UserId是空的 有没有一种方法可以让我从服务中已经存储的数据中获取存储的用户数据,而不是等待5秒后再次执行 比如: this.Service.user$(

Im当前通过以下方式获取新的更新用户值:

 this.Service.user$.subscribe(data => {
      this.userData = data;
      this.userId = data._id;
    });
但是updateUser仅每5秒执行一次

因此,在加载之前,
userData
UserId
是空的

有没有一种方法可以让我从服务中已经存储的数据中获取存储的用户数据,而不是等待5秒后再次执行

比如:

 this.Service.user$().GET((data:any) => { // gets the value already stored

    });
我将如何做到这一点

服务代码:

     user$: Observable<any>;


  constructor(private http: HttpClient, private router: Router) {
    this.user$ = this.userChangeSet.asObservable();
  }



  updateUser(object) {
    this.userChangeSet.next(object);
  }
user$:可观察;
构造函数(专用http:HttpClient,专用路由器:路由器){
this.user$=this.userChangeSet.asObservable();
}
updateUser(对象){
this.userChangeSet.next(对象);
}
编辑:


另外,我如何删除所有关于
ngondestory
事件的订阅?

将行为主体用于用户变更集。它在订阅后立即释放价值。 例如:

userChangeSet=newbehaviorsubject(this.currentData);

对userChangeSet使用BehaviorSubject。它在订阅后立即释放价值。 例如:

userChangeSet=newbehaviorsubject(this.currentData);

在您的服务中,您可以在内部使用行为规范 存储值,但将其公开为可观察值

以下是文档中的引用,详细说明了行为主体是什么

主体的变体之一是行为主体,它具有“当前价值”的概念。 它存储向其消费者排放的最新价值,以及 每当新的观察者订阅时,它将立即从BehaviorSubject接收“当前值”

更多信息,请参阅

服务代码:

     user$: Observable<any>;


  constructor(private http: HttpClient, private router: Router) {
    this.user$ = this.userChangeSet.asObservable();
  }



  updateUser(object) {
    this.userChangeSet.next(object);
  }
private _user$=新行为主体(null);//最初为空
构造函数(专用http:HttpClient,专用路由器:路由器){
this.userChangeSet.subscribe(val=>this.\u user$.next(val))
}
获取用户$(){
返回此项。_user$.asObservable();
}
然后您可以像在组件中一样使用它

this.service.user$.subscribe(v=>{
//在这里做事
})
请注意,第一个值 组件将获取的值将为null,因为这是的初始值 行为主体

编辑:

在组件中

private\u$=新主题();
公共Ngondestory():无效{
这个。_销毁了$.next();
此._销毁了$.complete();
}
然后是订阅费

this.service.user$.pipe(
takeUntil(这个.\u美元)
).订阅(v=>{
//在这里做事
})

其工作方式是,当销毁的$subject发出时,通过管道传输的
takeUntil(this.\u destrocted$)
的可观察对象将从各自的来源取消订阅。

您在服务中可以做的是在内部使用行为主体 存储值,但将其公开为可观察值

以下是文档中的引用,详细说明了行为主体是什么

主体的变体之一是行为主体,它具有“当前价值”的概念。 它存储向其消费者排放的最新价值,以及 每当新的观察者订阅时,它将立即从BehaviorSubject接收“当前值”

更多信息,请参阅

服务代码:

     user$: Observable<any>;


  constructor(private http: HttpClient, private router: Router) {
    this.user$ = this.userChangeSet.asObservable();
  }



  updateUser(object) {
    this.userChangeSet.next(object);
  }
private _user$=新行为主体(null);//最初为空
构造函数(专用http:HttpClient,专用路由器:路由器){
this.userChangeSet.subscribe(val=>this.\u user$.next(val))
}
获取用户$(){
返回此项。_user$.asObservable();
}
然后您可以像在组件中一样使用它

this.service.user$.subscribe(v=>{
//在这里做事
})
请注意,第一个值 组件将获取的值将为null,因为这是的初始值 行为主体

编辑:

在组件中

private\u$=新主题();
公共Ngondestory():无效{
这个。_销毁了$.next();
此._销毁了$.complete();
}
然后是订阅费

this.service.user$.pipe(
takeUntil(这个.\u美元)
).订阅(v=>{
//在这里做事
})

这样做的方式是,当销毁的$主体发射时,通过管道传输的
takeUntil(this.\u destrocted$)
的可观测对象将从各自的来源取消订阅。

您能给我一个完整的工作示例,以便我能更深入地理解它吗?:)这是一个谢谢的更新主题,还有一个关于销毁的问题。你能给我一个完整的工作示例,让我能更了解它吗?:)这是一个谢谢的更新主题,其中还有一个关于销毁的问题。离开组件时我如何销毁订阅?一个好方法是使用
takeUntil
。查看6)清理订阅是否有某种tslint需要更新?获取错误:src/app/global.service.ts(18,33)中出错:错误TS1005:';'应为。我的初始化不正确,应为
private\u user$=new Behavior Subject(null)
。已经更新了答案!离开组件时如何销毁订阅?一个好方法是使用
takeUntil
。查看6)清理订阅是否有某种tslint需要更新?获取错误:src/app/global.service.ts(18,33)中出错:错误TS1005:';'应为。我的初始化不正确,应为
private\u user$=new Behavior Subject(null)
。已经更新了答案!