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