簡體   English   中英

flatMap在Angular2中不起作用

[英]flatMap is not working in Angular2

大家好,我剛剛創建了一個簡單的ajax調用,其中在第二個ajax調用中使用了第一個ajax調用的響應,因此我在angular 2中使用了flatmap來運行第一個ajax調用,並在第二個ajax調用中使用了其響應,這里是代碼,但是第一次ajax調用工作正常,似乎.flatmap未運行后的代碼。 請幫助我解決此問題。

 createPerson(personClass: User, addressClass: Address): Rx.Observable <string> { let headers = new Headers(); headers.append('Content-Type', 'application/json'); headers.append("Cache-Control", "no-cache"); headers.append("Cache-Control", "no-store"); headers.append("If-Modified-Since", "Mon, 26 Jul 1997 05:00:00 GMT"); var myObj = { "firstName": personClass.firstname, "age": personClass.age, "lastName": personClass.lastname, "dateOfBirth": "null" }; return this.http.post(`${webServiceEndpoint}/person`, JSON.stringify(myObj), { headers: headers }).map((res: Response) => res.json()) .flatMap(data => { let body = data.json(); console.log(body); var myObj2 = { "personId": body, "address1": addressClass.streetname, "city": addressClass.city, "zipCode": addressClass.zipcode }; return this.http.post(`${webServiceEndpoint}/address`, JSON.stringify(myObj2), { headers: headers }).map((res1: Response) => res1.json()) }) } 

由於data不是Response對象,因此可能會失敗:

let body = data.json();

我認為您以錯誤的方式使用RxJS(您不認為是反應式的)(如果可以使用最新版本的angular):

示例(執行此操作的非常簡潔的方法,您可以非常輕松地測試代碼):

createPerson(personClass: User, addressClass: Address): Observable<Address> {
  /* Angular 5 you can do this into the HttpClient Interceptor */
  const headers = new Headers();
  headers.append('Content-Type', 'application/json');
  headers.append("Cache-Control", "no-cache");
  headers.append("Cache-Control", "no-store");
  headers.append("If-Modified-Since", "Mon, 26 Jul 1997 05:00:00 GMT");

  return this.createPerson(person)
    .switchMap((person: Person) => this.http.post<Person>(`${webServiceEndpoint}/person`, { person , headers})
    .switchMap((person: Person) => createAddress(person, address))
    .switchMap((person: Person) => this.http.post(`${webServiceEndpoint}/address`, person, {
        headers: headers
      }));
}

createAddress(person: Person, address: Address): Observable<Address> {
   return Observable.of({
     "personId": person.id,
     "address1": addressClass.streetname,
     "city": addressClass.city,
     "zipCode": addressClass.zipcode
   });
}

createPerson(person: Person): Observable<Person> {
  return Observable.of(<Person>{
    "firstName": personClass.firstname,
    "age": personClass.age,
    "lastName": personClass.lastname,
    "dateOfBirth": "null"
  });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM