2つのhttpリクエストを(ASP.NET Core MVC Web APIに)チェーンしようとしました。注文は重要ですので、私は.flatMap()
を使ってみました。RxJsチェーンの2つのHTTP呼び出し - ASP.NET Core MVC Web Api
- 私は(別のmicroserviceである)、ユーザ方法
constructor(private dataService: DataService) { } getUser(): Observable<User | null> { if (!this.retrieve("IsAuthorized") || (this.retrieve("Email") === "" || this.retrieve("Email") === null)) { return Observable.of(null); } return this.getUserByEmail(this.retrieve("Email")) .do((user: User) => { this.setCurrentUser(user); }); } public createUser(email: string, familyName: string, givenName: string, phoneNumber: string, gender: string): Observable<User | null> { let createUser = this.dataService.post(this.usersApiUrl, null, { Email: email, FamilyName: familyName, GivenName: givenName, PhoneNumber: phoneNumber, Gender: gender }).map(response => response.json()); return createUser.flatMap((res: Response) => { return this.getUser(); }) } private setCurrentUser(user: User) { this.currentUser.next(user); } private getUserByEmail(email: string): Observable<User> { return this.dataService.get(this.usersApiUrl, email).map(response => response.json()); }
this.currentUser
を取得呼び出したいユーザー
を作成するには、ReplaySubject<User> = new ReplaySubject<User>(1);
現在であります動作:POST(ユーザーの作成)は期待通りに動作します。 GET(this.getUser()
)が呼び出されません。
P.S:ユーザーの応答を作成することに本当に関心がありません。これは、成功したとしか伝えないためです。
更新:this.storage
がlocalStorage
ある
private retrieve(key: string): any {
var item = this.storage.getItem(key);
if (item && item !== 'undefined') {
return JSON.parse(this.storage.getItem(key));
}
return null;
}
。
と私は古典的な方法でこれを購読する:
this.userService.createUser(this.authService.email, this.authService.familyName,
this.authService.givenName, this.authService.phoneNumber, this.authService.gender).subscribe(() => { });
:
https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api
あなたはにそれを変えることができますか?おそらく、あなたは 'this.retreive()'、 'this.currentUser'と' .flatMap() 'を使用する場所を含むすべてのコードを投稿して、デバッグが容易になるようにしたいと思うでしょう。 – CozyAzure
@CozyAzure私の質問を更新しました私が言ったように、現時点では、作成したユーザーのhttp呼び出しを起動するだけですが、後でユーザーを取得することはありません。 –