2017-09-13 11 views
1

特定のコンポーネントが破棄される前に、データをapi(データベース)に送信する必要があるシナリオがあります。 angle2のライフサイクルで説明されているように、コンポーネントが破棄される前に1つのメソッドが実行され、そのメソッドはngOnDestroyと呼ばれます。しかし、ドキュメントで指定されているように、それはvoid関数なので、結果が返るのを待つことはありません。ngOnDestroy関数で呼び出されたときにAPI呼び出しが完了するのを待つ方法はありますか?

私の疑問は、ngOnDestroy関数でAPI呼び出しを実行して完了するのを待つ方法です。

私はちょうど更新機能を呼び出すと、それは動作しますが、あるコンポーネントから別のコンポーネントにルーティングするとき、次のコンポーネントが古いデータをロードしている間は最初のコンポーネントのデータはまだ更新されません(リフレッシュしたら新しいデータを取得します)。

updateData(data: any, callback?: Function) { 
    this.apiService.update(data).then(response => { 
     callback(response); 
    } 
} 

ngOnDestroy() { 
    this.updateData(this.data); 
} 

// Maybe i could somehow use callback functionality to postpone execution of ngOnDestroy function 
ngOnDestroy() { 
    this.updateData(this.data, response => { 

    }); 
} 

またはこのような状況を解決するために、他の方法がある:だから問題は、私は完全に実行して、正しい、更新されたデータをロードする次のコンポーネントに部品の破壊とルーティングを可能にするために、更新機能のために待つことができないということでしょうか?

答えて

2

このようなことをするのではなく、このアプローチをもっとクリーンで良くすると思います。

共有サービスを使用して、r値をDestroyの共有サービスに渡してから、2番目のコンポーネントに移動します。コンポーネントがロードされたときに、データが移入されて処分されることを確認するルーターの解決策があります。

共有サービスの場合はLINK - 質問2、ルータ解決LINKを確認してください。

ます。また、Reduxのために手を差し伸べることやngrxだから、私はいくつかのプロセスがバックグラウンドで動作していること状態を変更し、コールバックで、私はサービスの状態を変更するサービスをしなければならないあなたが読みやすくLINK

+0

をしたいareif (working = trueからworking = falseに変更して終了イベントを発行する)。そして、新しいルートで私は働く価値が本当であるかどうかをチェックして、それが完了したときに私に通知するイベントを購読します。そして、私は新しいデータを含むAPIに新しいリクエストをすることができます。ルーティングの前にデータをデータベースに保存するアプリケーション内で、コンポーネントAからコンポーネントBに移動できるため、コンポーネントBに直接アクセスできるためです。 – BoonZ

関連する問題