在我的Angular2-typescript应用程序中,我只使用forkJoin在所有并行HTTP调用完成后返回一个Observable。
问题:订阅回调一直无限期执行
这是我的代码:
http.service
import {Http} from "@angular/http";
constructor (private _http: HTTP) {}
makeGetRequest(....) {
return this._http.get(URL)
.map (res => res.json)
.toPromise();
my.service
import {Observable} from "rxjs/Observable";
import {HttpService} from "http.service"
constructor (private _httpService: HttpService) {}
myMethod(): Observable<any[]> {
return Observable.forkJoin(
this._httpService.makeGetRequest(
URL1
),
this._httpService.makeGetRequest(
URL2
)
)
}
my.component
import MyService from "my.service";
import Subscription from "rxjs";
constructor (private _service: MyService) {}
mySub: Subscription;
ngOnInit() {
this.mySub = this._service.myMethod.subscribe(data => {
data.forEach(console.log(data));
this.mySub.unsubscribe();
}
}
我尝试过(同样的问题):
答案 0 :(得分:17)
正如forkJoin
reference所说,
并行运行所有可观察序列并收集它们的最后一个元素。
这意味着运算符从已完成的observable中获取值,并返回具有单个值的已完成的observable。没有必要取消订阅。
答案 1 :(得分:1)
使用ngOnDestroy生命周期挂钩取消订阅。如果在销毁组件时不取消订阅Observable,则会留下内存泄漏。如果在工作演示中删除.unsubscribe(),则当* ngIf删除组件时,您将看到此行为。在后面的示例中,我们将看到Angular如何帮助我们管理Rx订阅。
答案 2 :(得分:0)
您可以取消它。假设observables
是您准备触发的HTTP请求数组(通过httpClient
执行)。
this.forkJoinSubscription = forkJoin(observables).subscribe(responses => {
. . . do something
});
this.forkJoinSubscription.unsubscribe();
您可能会在“网络”标签中注意到这些请求已被取消。