2017-08-13 4 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> 

非同期パイプObservable又はPromiseに加入し、それが放射された最新の値を返します。新しい値が発行されると、asyncパイプは変更を確認するコンポーネントをマークします。コンポーネントが破棄されると、asyncパイプは自動的にサブスクライブ解除され、潜在的なメモリリークを回避します。

データを変換する必要がある場合は、the map operator from RxJSを使用できます。

関連する問題