私はAngular 2 Appで2つの順次HTTPリクエストを実装しようとしています。 ユーザーがログインボタンをクリックすると、LocalStorageにリフレッシュとアクセストークンを保存し、もう1つのHTTPリクエストを実行してユーザー情報を取得します。私はこの投稿を見ましたが、私の場合はうまくいきません。 Angular 2 - Chaining http requests角2 - シーケンシャルなHTTPリクエスト
これはログインとgetMeサービスのための私の最初の実装でした: どのようにリクエストをマージできますか?
login.component.ts
this.authenticationService.login(this.user.email, this.user.password)
.subscribe(
data => {
// this.alertService.success('Registration successful', false);
this.router.navigate([this.returnUrl]);
},
error => {
console.log(error);
this.alertService.error(error);
this.loading = false;
});
authentication.service.ts
login(email: string, password: string) {
let headers = new Headers({
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
'Cache-Control': 'no-cache'
});
let options = new RequestOptions({ headers: headers });
return this.http.post(this.config.apiUrl + this.authenticationUrl + '/login',
JSON.stringify({ email: email, password: password }), options)
.map((response: Response) => {
let tokens = response.json();
if (tokens && tokens.token && tokens.refreshToken) {
// store user details and jwt token in local storage to keep user logged in between page refreshes
localStorage.setItem('tokens', JSON.stringify(tokens));
}
});
}
user.service.ts
getMe() {
console.log('getMe');
return this.http.get(this.config.apiUrl + this.usersUrl + '/me', this.jwt()).map((response: Response) => {
let user = response.json();
if (user)
localStorage.setItem('currentUser', JSON.stringify(user));
});
}
まず、あなたの関数は、約束または(例えば、約束)コールバックを返すことができます。プロミスを使用する場合は、結果を(.then、.catch)で連結することができます。コールバックを渡す場合、コールバックを介してメソッドをチェーンすることができます。 –
alexsc
ObservableまたはflatMapを使用すると、これを回避できます。 – pik4
http://stackoverflow.com/documentation/rxjs/8247/common-recipes/28035/sending-multiple-sequential-http-requests#t=201703151245534460988またはhttp://stackoverflow.com/documentation/rxjsをご覧ください/ 8247/common-recipes/27973 /送付複数並列httpリクエスト#t = 201703151246046358239 – martin