我是Angular/rxjs等的新手。我想依次提出两个HTTP请求。我假设如果我在第一个可观察的完整函数中调用下一个方法,则应该顺序运行,但事实并非如此。
login(): boolean {
let windowsAuthToken: string;
var result = this.http.get(this.authUrl).subscribe(
(response: any) => {
windowsAuthToken = response.token;
},
err => {},
() => {
return this.performWindowsAuthentication(windowsAuthToken);
}
);
return false;
}
performWindowsAuthentication(windowsAuthToken: string): boolean {
if (!!windowsAuthToken) {
const loginRequest = new WindowsLoginRequest(windowsAuthToken);
this.http
.post<WindowsLoginRequest>(this.winLoginUrl, loginRequest)
.subscribe(
(response: any) => {
if (response) {
localStorage.setItem(Constants.jwtToken, response.jwt);
}
},
err => this.logger.logError("Failed to get JWT token", err),
() => {
return true;
}
);
} else {
return false;
}
}
您可以使用SwitchMap
创建一个可观察的一个this.http.get(this.authUrl).pipe(
map(response => response.token),
switchMap(token => this.http.post<WindowsLoginRequest>(this.winLoginUrl, new WindowsLoginRequest(token)))
)