2017-08-30 1 views
3

RX.jsの新しいHttpClientModulemap()関数に関する問題に直面しています。角4のHttpClientModuleとmap()関数

私がしたいのは、get()メソッドからのオブザーバブル内で返される配列のオブジェクトを変更することです。

マイ海流コード:

get(url: string): Observable <any> { 
 
    return this.http.get(this.config.baseUrl + url); 
 
} 
 

 

 
playerSearch(text: string): Observable <any[]> { 
 
    if (text == "" || !text) { 
 
    return Observable.of([]); 
 
    } else { 
 
    return this.auth.get(`/players?$expand=Contact($expand=Blob)&$filter=contains(Contact/LastName, '${text}') or contains(Contact/FirstName, '${text}')`).map((x) => { 
 
     return { 
 
     Id: x.Id, 
 
     Name: x.Contact.FirstName + " " + x.Contact.FatherName.substring(0, 2) + ". " + x.Contact.LastName, 
 
     BlobSrc: this.utilitiesService.imageLinkCreator(x) 
 
     } 
 
    }); 
 
    } 
 
} 
 

 
search = (text$: Observable <string>) => 
 
    text$ 
 
    .debounceTime(300) 
 
    .distinctUntilChanged() 
 
    .do(() => this.searching = true) 
 
    .switchMap(term => 
 
    this.dataService.playerSearch(term) 
 
    .do(() => this.searchFailed = false) 
 
    .catch(() => { 
 
     this.searchFailed = true; 
 
     return Observable.of([]); 
 
    })) 
 
    .do(() => this.searching = false);

私が取得エラー:< {ID観察可能

タイプ」:いずれかを。名前:文字列。 BlobSrc:文字列。 }> 'は' Observable '型に割り当てられません。

タイプ '{Id:any;名前:文字列。 BlobSrc:文字列。 } 'は型' any [] 'に代入不可能です。

私が知る限り、map()メソッドは、配列の代わりに値が1つしかないobservableを返します。

{ Id: any; Name: string; BlobSrc: string; }オブジェクトの配列を含むオブザーバブルを返すための正しい構文は何ですか?

+0

httpリクエストから何が返されると思いますか? – Amit

+0

実際に 'map'は配列/配列ではなく、' Observable 'と' T => S'関数だけをとり、 'Observable ' – Amit

+0

を返します。値は 'Observable 'として配列されていますが、データをオブジェクトにマップします。 – Amit

答えて

0

あなたのhttpリクエストは、選手の配列を返す場合、これはあなたのコードは次のようになります方法です。ここで

get(url: string): Observable<any[]> { 
     return this.http.get(this.config.baseUrl + url); 
    } 


playerSearch(text: string): Observable<any[]> { 
    if (text == "" || !text) { 
     return Observable.of([]); 
    } else { 
     return this.auth.get(`/players?$expand=Contact($expand=Blob)&$filter=contains(Contact/LastName, '${text}') or contains(Contact/FirstName, '${text}')`).map((arr: any[]) => { 
      return arr.map(x => ({ 
       Id: x.Id, 
       Name: x.Contact.FirstName + " " + x.Contact.FatherName.substring(0, 2) + ". " + x.Contact.LastName, 
       BlobSrc: this.utilitiesService.imageLinkCreator(x) 
      }); 
     }); 
    } 
} 
+0

はいhttp reqは、選手の配列を返します。あなたのコードを使用しましたが、 'return arr.map'が動作しないようです –

+0

あなたはエラーを投稿できますか? – Amit

+0

私はAmitの上で実行しようとするコードを掲載しました。 –

0
playerSearch(text: string): Observable<any[]> { 
    if (text == "" || !text) { 
     return Observable.of([]); 
    } else { 
     return this.auth.get(`/players?$expand=Contact($expand=Blob)&$filter=contains(Contact/LastName, '${text}') or contains(Contact/FirstName, '${text}')`) 
      .map((arr: any[]) => { 
       return arr.map(x => { 
        debugger; 
        ({ 
         Id: x.Id, 
         Name: x.Contact.FirstName + " " + x.Contact.FatherName.substring(0, 2) + ". " + x.Contact.LastName, 
         BlobSrc: this.utilitiesService.imageLinkCreator(x) 
        }) 
       }); 
      }); 
    } 
} 

私はあなたのアミットに基づいて、実行しようとするコードがあります。 mapネストされたデバッガを追加しますが、実際にはエラーにはなりません。

関連する問題