Angular 如何显示加载,直到下一个项目或错误到达可观察到?

Angular 如何显示加载,直到下一个项目或错误到达可观察到?,angular,rxjs,observable,Angular,Rxjs,Observable,现在我尝试使用可观察对象。用户可以作为另一个用户注销和登录,非常适合流。但是如何以及在何处实现我的this.loadingService.showLoading()和this.loadingService.hideLoading() 它不能在订阅中,因为这永远不会完成。而this.loginService.login(凭证)也会返回一个用户$-流 public user$: Observable<any> = this.loginService.user$; this.subscr

现在我尝试使用
可观察对象
。用户可以作为另一个用户注销和登录,非常适合流。但是如何以及在何处实现我的
this.loadingService.showLoading()
this.loadingService.hideLoading()

它不能在订阅中,因为这永远不会完成。而
this.loginService.login(凭证)
也会返回一个
用户$
-流

public user$: Observable<any> = this.loginService.user$;

this.subscription.add(this.user$.subscribe(value => {
    this.user = value;
}, err => {
    console.error('error in user stream', err);
}, () => {
    console.error('impossible')
}));

userLoginHandle(credentials) {
    this.loginService.login(credentials)
}
public user$:Observable=this.loginService.user$;
this.subscription.add(this.user$.subscripte)(值=>{
这个用户=值;
},err=>{
console.error('error in user stream',err);
}, () => {
console.error(“不可能”)
}));
userLoginHandle(凭据){
this.loginService.login(凭据)
}

您可以对用户对象实现setter

set user(value) { 
  if(value) {
    this.loadingService.hideLoading();
  }
}

可以对用户对象实现setter

set user(value) { 
  if(value) {
    this.loadingService.hideLoading();
  }
}
这个怎么样

this.subscription.add(this.user$.subscribe(value => {
    this.loggingIn = false;
    this.user = value;
}, err => {
    this.loggingIn = false;
    console.error('error in user stream', err);
}, () => {
    console.error('impossible')
}));

userLoginHandle(credentials) {
    this.loggingIn = true;
    this.loginService.login(credentials)
}
这个怎么样

this.subscription.add(this.user$.subscribe(value => {
    this.loggingIn = false;
    this.user = value;
}, err => {
    this.loggingIn = false;
    console.error('error in user stream', err);
}, () => {
    console.error('impossible')
}));

userLoginHandle(credentials) {
    this.loggingIn = true;
    this.loginService.login(credentials)
}

我不太明白你的问题,为什么不简单:
this.loadingService.showLoading();this.subscription.add(this.user$.subscribe(value=>{this.user=value;this.loadingService.hideLoading();},err=>{console.error('error in user stream',err');this.loadingService.hideLoading();},()=>{console.error('canble'))如果到达的用户没有调用
loginService.login()
,那么
hideLoading()
将不可能,因为从未调用过
showLoading()
。用户可以到达而不抛出登录?@yonatanlling yes,在应用程序启动时,通过保存状态,因为用户可能不希望在每次启动应用程序时都登录。有了承诺,我只会做
LoginService.login.then().catch()
,但通过观察,我正在努力找出实现东西的正确方法。我不太理解你的问题,为什么不简单:
this.loadingService.showLoading();this.subscription.add(this.user$.subscribe(value=>{this.user=value;this.loadingService.hideLoading();},err=>{console.error('error in user stream',err');this.loadingService.hideLoading();},()=>{console.error('canble'))如果到达的用户没有调用
loginService.login()
,那么
hideLoading()
将不可能,因为从未调用过
showLoading()
。用户可以到达而不抛出登录?@yonatanlling yes,在应用程序启动时,通过保存状态,因为用户可能不希望在每次启动应用程序时都登录。有了承诺,我只会做
LoginService.login.then().catch()
,但有了观察,我很难找到实现东西的正确方法。是的,这是一个可行的解决方案,但改用承诺,感觉更干净,代码更少。当然有办法做到这一点,但我真正想要的是一个干净的解决方案。但目前我决定不在任何地方使用可观察的
,只在我认为有意义的地方使用。是的,这是一个有效的解决方案,但使用承诺,感觉更干净,代码更少。当然有办法做到这一点,但我真正想要的是一个干净的解决方案。但是现在我决定不在任何地方使用可观察的东西,只在我认为有意义的地方使用。