Я думаю о лучшем способе цепочки к http-запросам, но условно.Давайте подумаем об этом сценарии использования:
- Получить идентификатор книги из параметров маршрута
- Затем я хочу получить книгу по идентификатору.
- Затем, когда я нашел книгу, яхотите получить список всех магазинов, которые продают эту книгу.
BooksComponent.ts
import { Component, OnDestroy, OnInit } from '@angular/core';
import { filter, startWith, takeUntil } from 'rxjs/operators';
import { Subject } from 'rxjs';
import { BookService } from 'books.service';
@Component({
selector: 'app-books',
templateUrl: './books.component.html'
})
export class BooksComponent implements OnDestroy, OnInit {
private ngUnsubscribe = new Subject();
constructor(private booksService: BookService) { }
ngOnInit() {
this.route.paramMap.subscribe(params => {
this.id = params.get("book_id")
})
this.booksService.getBookById(this.id)
.pipe(
startWith([]),
takeUntil(this.ngUnsubscribe)
)
.subscribe(book => this.book = book);
this.booksService.getShopsByBook(this.book)
.pipe(takeUntil(this.ngUnsubscribe))
.subscribe(shops => console.log(shops));
}
ngOnDestroy() {
this.ngUnsubscribe.next();
this.ngUnsubscribe.complete();
}
}
Простой?Так как же это можно сделать с помощью цепочки подписок и максимально избежать возможных утечек памяти?