我的身份验证服务中有一个登录函数,如果登录完成或返回httperror,我希望它返回一些值。不过,这一步很简单,如果初始登录成功的话,我还想包括使用第二个可观察的加载帐户详细信息。这个步骤对我不起作用,因为如果登录失败,代码也不应该尝试加载帐户详细信息。我尝试使用merge函数,但是当出现错误时,它仍然调用另一个observable。另外,即使登录成功了,我也从来没有从第二次观察到延迟。
我很难适应RXJS第6版的管道设置,而且要适应这么多的管道很难理解。
登录方法:
public Login(LoginData: LoginModel): Observable<HttpErrorResponse | LoginResponse>
{
var loginRequest = this.web.post<LoginResponse>('http://localhost:20552/api/token', LoginData).pipe(share());
return loginRequest.pipe(map((success: LoginResponse) =>
{
return new LoginResponse(success.token);
}), merge(this.LoadAccountDetails())).pipe(catchError((val: LoginResponse | HttpErrorResponse) => of(val))).pipe(map((x: LoginResponse | HttpErrorResponse) =>
{
if (x instanceof LoginResponse)
{
return new LoginResponse(x.token);
} else
{
var error = x as HttpErrorResponse;
return error;
}
}));
}
public LoadAccountDetails(): Observable<any>
{
return of({}).pipe(delay(5000)); // Simple delay function because I haven't finished this server code yet.
}