我有一個服務,異步獲取用戶,我需要從服務中獲取用戶,但只有從服務器獲取用戶後。是否有可能從我的服務中獲取用戶,並等待用戶獲取並返回?等待承諾完成服務
這樣的事情?
- 服務構造函數開始從服務器獲取用戶。
- 注入此服務的組件需要服務的用戶並且得到()
- 服務仍然從服務器獲取用戶,所以此時get()需要被延遲..不知何故。
- 服務完成獲取用戶,get()返回用戶。
這是諾言能做到的嗎?
我有一個服務,異步獲取用戶,我需要從服務中獲取用戶,但只有從服務器獲取用戶後。是否有可能從我的服務中獲取用戶,並等待用戶獲取並返回?等待承諾完成服務
這樣的事情?
這是諾言能做到的嗎?
是的,你可以實現的方法是這樣的:
userPromise;
constructor() {
userPromise = http.get();
}
get() {
return userPromise;
}
使用@Lazar這樣的可觀察方法會更好嗎? –
這是可能的,因爲在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>
從文檔:
異步管訂閱了一個或
Observable
和Promise
返回它已發出的最新的值。當發出新值時,async
管道將標記要檢查更改的組件。當組件被破壞時,async
管道將自動取消訂閱,以避免潛在的內存泄漏。
如果您需要轉換數據,可以使用the map
operator from RxJS。
不,不可以等。只需從您的服務中退還承諾。 – Bergi