2017-11-30 13 views
0

後、私は次の関数持って何かを実行します。成功したHTTP GET

public getList(): Observable<T[]> { 
    let url = this.baseUrl + this.type + 'list'; 
    return this.http.get<any>(url, {headers: this.headers }) 
     .retry(3) 
     .map(response => response.list as T[], 
      (error: HttpErrorResponse) => { 
      this.toastrService.error('everything is broken', 'Major Error', { 
       timeOut: 3000, 
      }); 
      console.log(error.name); 
      }); 
} 

を私も成功したWebサービスの呼び出しの後toasterService.success()とトースターを追加したいが、私は.map(response => response.list as T[]後にこれを追加する方法を見つけ出すことはできません。これどうやってするの?

答えて

3

この方法を購読する必要があります。 Observablesを使用していることを忘れないでください。したがって、オブザーバーが必要です。

あなたはこのような何かを行うことができます。

public getList(): Observable<T[]> { 
    let url = this.baseUrl + this.type + 'list'; 
    return this.http.get<any>(url, {headers: this.headers }) 
     .retry(3) 
     .map(response => response.list as T[]) 
} 

this.getList().subscribe((response)=>{ 
    //Handle your success here 
}, 
(error)=>{ 
    //Handle Your Error here 
}); 

は、あなただけの特定の形式にあなたの応答を変換するには、マップ機能を使用する必要があることを覚えておいてください。あなたがよく見ると、あなたはすでにその行頭で応答を返しています。

GETリクエストの成功またはエラーを実行するために必要なすべてのコードは、前述のようにサブスクライバで処理する必要があります。

getList()メソッドは、データを返すことでそのジョブを完了しました。今、それを処理するのは加入者の仕事です。

getListメソッドがサービス内にある場合、コンポーネントデコレータに提供することによって、コンポーネントのコンストラクタにサービスを注入する必要があります。

そして代わりのthis.getList().subscribe()をやって、あなたはあなたの助けthis.yourServiceInstance.getList().subscribe()

+0

感謝を行うことができます。私は '.subscribe()'の後のブロックでsuccesを処理できることを知っていますが、 'subscribe()'を呼び出すたびにトーストメッセージを実装する必要があります。 'this.'のために' this.getList()。subscribe(.....) 'をどこに置くべきか分かりません。それは私の奉仕には意味がありませんが、それはどこにあるべきですか?ありがとうございました。 –

+0

加入者はコンポーネントに含まれている必要があります。コンポーネントコンストラクタにtoasterServiceを注入する必要があります。コンポーネントをサービスにインジェクトする方法については、この記事をお読みください。 https://blog.thoughtram.io/angular/2015/09/17/resolve-service-dependencies-in-angular-2.html –

+0

あなたは複数回購読する必要はありません。あなたのGETから利用可能な新しいデータがあるときはいつでも、あなたの成功ハンドラは解雇されます。したがって、「購読する」という言葉。あなたはあなたのサービスからのデータ変更を購読しています。 –

関連する問題