RxJS observables订阅链中某个位置的同步操作问题

RxJS observables订阅链中某个位置的同步操作问题,rxjs,observable,rxjs5,Rxjs,Observable,Rxjs5,我有一个同步操作,它运行在RxJS可观测订阅链的某个地方 此同步操作在本地存储(同步)上设置数据,该数据需要在链的下一步执行http调用(异步/可观察) 以下是序列的摘要: 异步操作返回一个称为 在本地存储器上同步操作设置数据 使用本地存储日期并返回可观察数据的异步操作 最终认购 调用3.时,本地存储上似乎没有数据-应该是由2设置的。 以上只是问题的简化 以下是完整的代码(以typescript格式): 这由表单(位于组件中)调用: 从UserAccountService: resetPas

我有一个同步操作,它运行在RxJS可观测订阅链的某个地方

此同步操作在本地存储(同步)上设置数据,该数据需要在链的下一步执行http调用(异步/可观察)

以下是序列的摘要:

  • 异步操作返回一个称为
  • 在本地存储器上同步操作设置数据
  • 使用本地存储日期并返回可观察数据的异步操作
  • 最终认购
  • 调用3.时,本地存储上似乎没有数据-应该是由2设置的。

    以上只是问题的简化

    以下是完整的代码(以typescript格式):

    这由表单(位于组件中)调用:

    从UserAccountService:

      resetPassword(passwordResetForm) {
        return this.http.put(this.urls.USER_ACCOUNT.RESET_PASSWORD, passwordResetForm);
      }
    
    来自SessionService:

      signinByUserAccountToken(userAccountToken: string) {
        return this.http.post(format(this.urls.AUTHENTICATION.SIGNIN_BY_USER_ACCOUNT_TOKEN, {userAccountToken}), null)
          .do(response => this.setPersonalInfo(response.headers.get('x-auth-token')));
      }
    
      private setPersonalInfo(sessionToken) {
        localStorage.setItem('authenticated', 'true');
        localStorage.setItem('sessionToken', sessionToken);
        this.authenticated$.next(true);
      }
    
    UserAccountResolve:

    import {Injectable} from '@angular/core';
    import {Resolve, ActivatedRouteSnapshot} from '@angular/router';
    import {UserAccount} from '../shared/models/useraccount.model';
    import {AuthenticatedHttpClient} from '../shared/services/authenticated-http-client.service';
    import {URLS} from '../urls/URLS';
    
    @Injectable()
    export class UserAccountResolve implements Resolve<UserAccount> {
    
      private urls;
    
      constructor(private authenticatedHttpClient: AuthenticatedHttpClient) {
        this.urls = URLS;
      }
    
      resolve(route: ActivatedRouteSnapshot) {
        //Will fail
        return this.authenticatedHttpClient.get(this.urls.USER_ACCOUNT.USER_ACCOUNT)
          .map(response => response.json());
      }
    
    }
    

    有人能帮忙吗?

    如果我正确理解您的问题,您希望延迟重定向用户,直到两个HTTP请求都完成。当前,您订阅了Observable,这导致重定向在观察到第一个结果时立即发生,在本例中,这是userAccountService.resetPassword()的结果

    如果您只想等待所有请求完成,您可以按如下方式订阅onCompleted:

    observable.subscribe(
        _ => {},
        err => { /* Don't forget to handle errors */ },
        () => this.router.navigate(['/dashboard']))
    

    然而,有一个你不关心结果的可观察对象是一个迹象,表明你的应用程序可能需要在最近某一天进行重构。

    如果我正确理解你的问题,你希望延迟重定向用户,直到两个HTTP请求都完成。当前,您订阅了Observable,这导致重定向在观察到第一个结果时立即发生,在本例中,这是userAccountService.resetPassword()的结果

    如果您只想等待所有请求完成,您可以按如下方式订阅onCompleted:

    observable.subscribe(
        _ => {},
        err => { /* Don't forget to handle errors */ },
        () => this.router.navigate(['/dashboard']))
    
    然而,有一个你不关心的结果是一个信号,你的应用程序可能需要在最近的某一天进行重构

    observable.subscribe(
        _ => {},
        err => { /* Don't forget to handle errors */ },
        () => this.router.navigate(['/dashboard']))