【发布时间】:2024-01-10 17:49:01
【问题描述】:
在我的 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();
}
}
我尝试了什么(同样的问题):
- 在 Http.service 中返回 Observable 而不是 Promise
- 在 my.component 中使用 .first().subscribe() 而不是 subscribe()
- 把这个.mySub.unsubscribe();在 ngOnInit 结束时而不是在订阅回调内部(也使用 setTimeout(() => ....))
【问题讨论】:
-
订阅回调无限期执行是什么意思?
-
这个问题没有意义。 forkJoin 加入来自 completed 可观察对象的结果,不应取消订阅,因为它只有一个值。如果您在无限期执行方面遇到问题,请提供一个MCVE 可以复制您的问题
-
@estus 你是对的。显然发生这种情况是因为订阅被实例化了两次,这导致了问题。随意回答问题,我会接受的;)
-
当然。好在很容易解决。