我有一个嵌套的forkjoin的问题,当我尝试订阅拉,它回来我的数据,但我可以看到,getitem3仍在运行。如何要等到所有的功能都完成之前,订阅如何等待嵌套forkjoin完成?
见例如
pull(id) {
return Observable.forkJoin(
this.getitem1(id),
this.getitem2(id),
this.getitem3(id)
);
}
getitem3(id) {
let url = 'https://host3/get/' + id;
let observableBatch = [];
return this.http.get(url).map(res => res.json()).map(data => {
data.posts.data.forEach((item) => {
observableBatch.push(this.getImageUrl(item.id));
})
return Observable.forkJoin(observableBatch);
})
}
getitem2(id) {
let url = 'https://host2/get/' + id;
let observableBatch = [];
return this.http.get(url).map(res => res.json()).map(data => {
data.posts.data.forEach((item) => {
observableBatch.push(this.getImageUrl(item.id));
});
return Observable.forkJoin(observableBatch);
});
}
getitem1(id) {
let url = 'https://host1/get/' + id;
let observableBatch = [];
return this.http.get(url).map(res => res.json()).map(data => {
data.posts.data.forEach((item) => {
observableBatch.push(this.getImageUrl(item.id));
});
return Observable.forkJoin(observableBatch);
});
}
getImageUrl(id) {
let url = 'https://localhost/image/' + id;
return this.http.get(url).map(res => res.json()).map(data => {
console.log('done');
});
}
在'getImageUrl(id)'方法中,您使用'subscribe',因此它调用了url。删除'subscribe'(所以它会返回一个可观察的)并重试。 – echonax
我更改了订阅地图。我必须在我的getItem中订阅它吗? – kabus
不,你应该订阅'拉(id)'方法,如果这是你唯一需要的。 – echonax