2017-05-24 15 views
3

ガジェットをループして一連のHttp呼び出しを行いました。すべての要求を中止する方法はありcomponent.service.tsあなたの観測からAngular2:ループ中のHttpリクエストをキャンセルします。

@Injectable() 
export class UserService { 
    constructor(public _http: Http) { } 
getGadgetsData() { 

     return this._http.get(this._dashboards, { headers: this.getHeaders() }) 
      .map((res: Response) => res.json()); 
    } 

} 
+0

「アボート」とはどういう意味ですか? this._http.getはすぐにHTTP要求を作成しますが、後で応答を非同期的に返します。実際のHTTPリクエストを中止するか、返されたObservableオブジェクトの登録を解除するだけですか? – wannadream

+0

はい私はそれを認識しています。いずれにしても、実際のリクエストを中止するか、購読を停止するかは問題ありません。しかし、リクエストがループ内にあるので、複数のリクエストがあることがわかります – indra257

+0

どのような条件下で、Observableオブジェクトの登録を解除したいですか? – wannadream

答えて

4

これが必要なのかどうか見てください。

observableList: []; 

...... 

for (let gadget of gadgets) { 
    let obs = this.userService.getGadgetsData(gadget.Id, gadget.Name).subscribe(gadgetsData => { 
    }); 
    this.observableList.push(obs); 
} 

... 
onClick() { 
    for (let i = 0; i < this.observableList.length; i++) { 
     this.observableList[i].unsubscribe(); 
    } 
} 
+0

作品は魅力的です:) – indra257

0

あなたはあなたの要求のタイムアウトを追加することができ、その後、unsubscribe

 for (let gadget of gadgets) { 
       this.userService.getGadgetsData(gadget.Id, gadget.Name).subscribe(gadgetsData => { 
    }); 
} 

マイサービスコード。

注:サンプルコードのためにRxJsとObservableを使用していると思います。あなたはクリックイベントをお持ちの場合は

は、すべてのあなたの観測(inside your loop)への参照を保存して、リストに入れ、その後、あなたの関数の内部で(例えばonClick())すべての観測から、そのリストとunsubscribeを反復処理することができます。 githubのドキュメントから

var myObservable = this.userService.getGadgetsData(gadget.Id, gadget.Name) 
      .subscribe(gadgetsData => {}); 

    //later on your code, maybe on your click event 

    myObservable.unsubscribe(); 

unsubscribesubscribe

徹底的になろうとして:あなたはメイン(親)からの退会時になるよう

また、すべての観測可能な、他の観測に観測を追加することができます内に含まれる観察可能なものは、購読を中止します。 Observableオブジェクトに含まれているaddremoveというメソッドを使用して、これを実現できます。

これを行うにはより良い方法があるかもしれませんが、それは私の頭の上にありません。

+0

私は、複数の保留中の要求があるので、どこにタイムアウトを追加したいですか?私はあなたが何を意味するかを正確には知りませんでした。もう少し説明してください。 – indra257

関連する問題