У меня есть рекурсивная асинхронная функция, которая создает крошку или путь к форуму, но я не понимаю, как наблюдать за самой крошкой?Вот как можно сделать так, чтобы все форумы, из которых состоит крошка, можно было наблюдать, и если кто-то из них изменится, вся крошка будет снова подписана.Это происходит в том случае, если один из родительских идентификаторов изменяется, когда пользователи удаляют форумы, тем самым разрывая ссылку.Мне нужна горячая наблюдаемая?
Я подумал, что мне нужно изменить ее на этом этапе:
const parentForum = await that.forumsAllService.getForumFromPromise (forumId);
чтобы я наблюдал за этим, но как наблюдать за всеми форумами как за одним наблюдателем?
const parentForum = await that.forumsAllService.getForumFromObservable (forumId);
Какие части моего кода у меня естьизменить?
// routine to fetch the parent forums that make up the breadcrumb to the child.
private getBreadcrumbs (parentForumId): Promise<any[]> {
return new Promise<any[]>((resolve, reject) => {
const that = this;
let breadcrumbs: any[] = [];
// fetch parent forum
const getBreadcrumbFragment = async function (forumId) {
const parentForum = await that.forumsAllService.getForumFromPromise(forumId);
if (parentForum){
// store forum and check if it has a parent of its own, store its id as the nextPage
return {
data: parentForum,
nextPage: parentForum && parentForum.parentId && parentForum.parentId.length > 0 ? parentForum.parentId : undefined
};
}
else {
return {
data: null,
nextPage: undefined
};
}
};
// recursive routine to build breadcrumb
const getBreadcrumb = async function (forumId) {
const fragment = await getBreadcrumbFragment(forumId)
// store our crumbs
if (fragment && fragment.data)
breadcrumbs.push(fragment.data);
if (fragment.nextPage) { // we still have another parent child relationship to fetch
return await getBreadcrumb(fragment.nextPage);
} else {
return breadcrumbs.reverse(); // finish, put list the right way around
}
}
// initialize breadcrumb
getBreadcrumb(parentForumId);
// return our results
resolve(breadcrumbs);
});
}
// *****************************************************
// this is how i eventually call the recursive function
// *****************************************************
if (forum.parentId && forum.parentId.length > 0){
console.log('fetching breadcrumbs');
this._breadcrumbSubscription = Observable.fromPromise(this.getBreadcrumbs(forum.parentId))
.subscribe(breadcrumbs => {
this.breadcrumbs = of(breadcrumbs);
});
}
else {
console.log('not fetching breadcrumbs');
this.breadcrumbs = of([]);
}