2017-08-26 13 views
0

私はnodejs/angular2を初めて使用しています。私はノードの非同期動作と角度サービスへのリターンという奇妙な問題を抱えています。私が抱えている問題は、コンポーネントAとコンポーネントBに同じ角度サービスが注入されているという2つの異なる角度成分があることです。ノード/角度2サービスが間違ったコンポーネントに値を返す

サーバ側は非同期ノードサーバであり、要求を完了するまでに時間がかかります。問題はアプリが角度コンポーネントAから角度コンポーネントBにルーティングするときです。ノードへのリクエストはコンポーネントAから完了することがあります現在コンポーネントBにルーティングされ、応答がそこに送られます。 (コンポーネントAとBは同時に表示されません。一度に1つしか表示されません)

コンポーネントBも同じサービス/メソッドに登録されているため、コンポーネントA結果として不正確な値が生じます。

コンポーネントBから送信された要求に対する応答のみを受信する方法はありますか。

どちらの要素であるが、このようなとしてサービス内の同じ方法に加入している:

コードは、私はスニペットをするつもりですので、ここに置くための大きなへの道です。

ここには、各コンポーネントに含まれるコードがあります。サービス層から

getNode(){ 

    this.userService.getNode().subscribe(resNodeData => { 
    this.node = resNodeData; 
      if(this.node == null){ 
      return null; 
     } 
     else{ 
    // console.log(this.node); 
      } 
     }); 

}

コード:

export class UserService { 
    //call to node server async 
getNode() { 
return this.http.get("http://" + host + ":3000/api/namenode/" + this.clusterService.getCluster()) 
.map((res:Response) => res.json()) 
.catch(this._errorHandler); 
    } 


} 

私は私の質問が長いと混乱して知っています。助けていただければ幸いです。

答えて

1

両方のコンポーネントのライフサイクルフックOnDestroyの購読を解除する必要があります。

+0

いいえノードサーバーからのペイロードは、サービス層に現在加入しているコンポーネントに配信されません。私はこれを試して、それは動作しません。私はこれをコードベースに関係なく残しました。 – user1893410

+0

ダング、私は明日これを再現できるかどうか見てみましょう。その間、Angularのどのバージョンを使用していますか?あなたはangle-cliでプロジェクトを作成しましたか?そうでない場合、あなたは何を使っていますか? – dockleryxk

+0

私は角度2.4.10を使用しています。私はangle-cli 1.3.0も使用しています。私は、あなたが提案したようにonDestroyメソッドを使用し、bluebirdのようなフレームワークを使用して、このサービスから観察している次のコンポーネントにペイロードを送信しないように、ノードサーバーに何らかの取り消し要求を送信することを考えます。どちらかというと、抽象化を解除し、2つの異なるコンポーネントによってサービスレイヤーで呼び出される別のメソッド名を使用するだけです。 (私はこれをしたくない) – user1893410

関連する問題