2016-12-21 34 views
0

在訂戶內部進行API調用是否存在任何缺陷/注意事項?還是有一個首選的方法來解決這個問題?一個例子:ngrx訂閱者內部的API調用

this.store.select('person').subscribe(person => { 
    this.http.get(`/tasks/${person.id}`) 
     .map(res => res.json()) 
     .subscribe(tasks => { 
      // Dispatch tasks.update 
     }); 
}); 

任何想法將不勝感激。

Tom

回答

1

我不認爲調用這樣的HTTP方法是個好主意。

例如:
- 您person更新
- HTTP請求被觸發
- 你發送一個動作將更改保存到店
- 由於商店的更新,你就會有另一個啓動HTTP請求
- 等等

您將最終在您的後端安裝循環和DDOS。

取而代之的是,你應該派遣一個動作FETCH_PERSON,用Effect來捕捉它,一旦你得到響應的效果,根據響應調用另一個動作(例如FETCH_PERSON_SUCCESS或FETCH_PERSON_ERROR)。

+0

然後我會抓住'FETCH_PERSON_SUCCESS'的效果,並從中取回個人任務嗎? – maddockst

+0

您可以毫無問題地按照自己的想法鏈接效果。如果您不需要等待'FETCH_PERSON'來啓動請求以獲取該人員的任務,則可以使用'forkJoin'運算符同時觸發兩個請求。這取決於你:) – Maxime

+0

'FETCH_PERSON_SUCCESS'是否包含來自API調用的響應,以用於捕獲它的效果?因此,如果API調用返回例如'groupId' ......我想在下一個效果中使用這個'groupId'來執行另一個API調用以獲取組 – maddockst