2017-08-13 126 views
0

我有一個服務,異步獲取用戶,我需要從服務中獲取用戶,但只有從服務器獲取用戶後。是否有可能從我的服務中獲取用戶,並等待用戶獲取並返回?等待承諾完成服務

這樣的事情?

  1. 服務構造函數開始從服務器獲取用戶。
  2. 注入此服務的組件需要服務的用戶並且得到()
  3. 服務仍然從服務器獲取用戶,所以此時get()需要被延遲..不知何故。
  4. 服務完成獲取用戶,get()返回用戶。

這是諾言能做到的嗎?

+0

不,不可以等。只需從您的服務中退還承諾。 – Bergi

回答

1

是的,你可以實現的方法是這樣的:

userPromise; 
constructor() { 
    userPromise = http.get(); 
} 

get() { 
    return userPromise; 
} 
+0

使用@Lazar這樣的可觀察方法會更好嗎? –

0

這是可能的,因爲在Maximus's answer說,但這不是做事情的角度的方式。相反,您應該利用Observables和async管道。

您的服務應該簡單地返回一個可觀察的用戶

@Injectable() 
export class MyService { 
    constructor(private http: HttpClient) {} 
    getUsers = this.http.get(`my.api/users`) 
} 

注入在組件這項服務。如果您不需要對數據進行任何轉換,只需在模板中使用async pipe即可。

<ol *ngFor="let user of myService.getUsers | async"> 
    <li>{{ user.name }} 
</ol> 

從文檔:

異步管訂閱了一個或ObservablePromise返回它已發出的最新的值。當發出新值時,async管道將標記要檢查更改的組件。當組件被破壞時,async管道將自動取消訂閱,以避免潛在的內存泄漏。

如果您需要轉換數據,可以使用the map operator from RxJS