我通过遍历小工具进行了一系列Http调用。有没有办法中止所有请求
for (let gadget of gadgets) {
this.userService.getGadgetsData(gadget.Id, gadget.Name).subscribe(gadgetsData => {
});
}
我在component.service.ts中的服务代码
@Injectable()
export class UserService {
constructor(public _http: Http) { }
getGadgetsData() {
return this._http.get(this._dashboards, { headers: this.getHeaders() })
.map((res: Response) => res.json());
}
}
答案 0 :(得分:5)
请查看这是否是您想要的。
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();
}
}
答案 1 :(得分:0)
您可以为您的请求添加超时,然后从您的observable中添加unsubscribe
。
注意:由于您的示例代码,我假设您正在使用RxJ和Observable。
如果你有一个click事件,你可以保存对所有observable(inside your loop
)的引用并将它们放在一个列表中,然后在你的函数内部(例如onClick()
)遍历该列表来自你所有观察者的unsubscribe
。
var myObservable = this.userService.getGadgetsData(gadget.Id, gadget.Name)
.subscribe(gadgetsData => {});
//later on your code, maybe on your click event
myObservable.unsubscribe();
来自github文档:unsubscribe和subscribe
努力做到彻底:
您还可以将Observable添加到其他Observable中,这样当您取消订阅main(parent)observable时,其中包含的所有observable也将取消订阅。您可以使用Observable对象中包含的方法add
和remove
来实现它。
可能有更好的方法可以做到这一点,但这是我的头脑。