У меня проблема с вложенным forkjoin, когда я пытаюсь подписаться на pull, он возвращает мои данные, но я вижу, что 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
Нет, вы должны подписаться на метод 'pull (id)', если это единственное, что вам нужно. – echonax