угловой 6: правильный способ создания цепочек http-запросов - PullRequest
0 голосов
/ 12 февраля 2019

Я думаю о лучшем способе цепочки к http-запросам, но условно.Давайте подумаем об этом сценарии использования:

  1. Получить идентификатор книги из параметров маршрута
  2. Затем я хочу получить книгу по идентификатору.
  3. Затем, когда я нашел книгу, яхотите получить список всех магазинов, которые продают эту книгу.

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();
        }
    }

Простой?Так как же это можно сделать с помощью цепочки подписок и максимально избежать возможных утечек памяти?

...