我嘗試鏈接兩個http請求(到ASP.NET核心MVC Web Api)。訂單很重要,所以我試圖使用.flatMap()
。RxJs鏈兩個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:我沒有真正有興趣創建用戶響應,因爲那隻會告訴我它成功了。
更新:
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.storage
是localStorage
。
而且我訂閱了這個以經典的方式:
this.userService.createUser(this.authService.email, this.authService.familyName,
this.authService.givenName, this.authService.phoneNumber, this.authService.gender).subscribe(() => { });
但什麼是不工作?也許你會想要發佈所有的代碼(包括'this.retreive()','this.currentUser'和你使用'.flatMap()'的地方,這樣更容易調試 – CozyAzure
@CozyAzure我更新了我的問題與訂閱呼叫和檢索功能。正如我所說,目前它只是激發創建用戶HTTP呼叫,但它永遠不會得到用戶後 –