Труба против подписки в Angular - PullRequest
0 голосов
/ 19 апреля 2020

Надеюсь, у всех все в порядке. Может, пожалуйста, кто-то четко объяснит, какой из них выбрать труба и подписаться , и почему? когда речь идет не только о получении ответа, но и об инициализации некоторых других переменных или внесении изменений в логические переменные.

Также взгляните на код. Это правильный способ сделать это?

public getAlbums(){
    this.enableLoader = false;
    this.albumHttpService.getAlbums()
        .pipe(
            map((response) => {
                this.enableLoader = false;
                if (!response.albums.length) {
                    this.noDataSet = true;
                    if (response.albums === null) {
                        this.list = [];
                    }
                }
                else{
                    this.noDataSet = false;
                    this.list = response.albums;
                }
            }),
            catchError((error) => {
                this.noDataSet = false;
                this.data = [];
                throw new Error(error);
            }) 
        )
        .subscribe();
}

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 19 апреля 2020

В pipe вы можете объединить многие другие функции и использовать эти функции для записи некоторых логик c, подготовки данных для представления и т. Д. c.

subscribe похоже на последнее Точка, в которой вы получаете готовые данные, и лучше не писать там никаких логик c, а только присваивания вашим моделям представления или т. д. c.

0 голосов
/ 19 апреля 2020

Pipe в основном принимает выходные данные функции и передает их в качестве входных данных для другой функции. Это действительно отличный и эффективный способ манипулирования данными, и он действительно мощный.

Мы в основном передаем вывод чего-либо в другую функцию, которая может модифицировать входящие данные или просто для дополнительной логики c на верхняя часть данных (триггерные побочные эффекты).

Мы можем иметь несколько логик, связанных в операторе pipe.

Subscribe вызывается для наблюдаемой, чтобы подписаться на окончательные данные, которые выталкивается из наблюдаемой.

Быстрый пример: у меня есть наблюдаемая, которая отправляет строку «Мир».

worldObservable$.pipe(
  tap(data=>console.log(data)), // Prints "World"
  map(data=> `Hello ${data}`)
)
.subscribe(data=>console.log(data)); // Prints "Hello World"

В этом примере сначала я использую tap, чтобы получить данные, а затем войти в него. Затем я изменяю данные с помощью оператора map, который изменяет исходные данные. Когда я подписываюсь, он записывает измененные данные вместо исходных.

Надеюсь, это дало вам дополнительную ясность.

...