Rx JS Использование метода труб - PullRequest
1 голос
/ 05 апреля 2020
const apiData = ajax('/api/data').pipe(
  retry(3), // Retry up to 3 times before failing
  map(res => {
    if (!res.response) {
      throw new Error('Value expected!');
    }
    return res.response;
  }),
  catchError(err => of([]))
);

Я учу angular и с официального сайта angular я видел этот код. Для чего используется функция .pipe () ?

1 Ответ

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

Rx JS реализует парадигму реактивного программирования на основе концепции НАБЛЮДЕНИЙ.

Если вы уже знаете Обещания javascript, наблюдаемые имеют некоторые незначительные различия :

  • Обещание нетерпеливо, тогда как Observable лениво;
  • Обещание всегда асинхронно, в то время как Observable может быть либо синхронным, либо асинхронным;
  • Обещание может предоставить одно значение, тогда как Observable - это поток значений (от 0 до нескольких значений);

Сказав это, Rx JS библиотеки предоставляют множество функций с именем Операторы создания , которые могут использоваться для создания новых НАБЛЮДЕНИЙ, начиная с очень распространенного поведения JS, например AJAX вызовов (асинхронный * 1040) * и xml)

import { ajax } from 'rxjs/ajax';

// Create an Observable that will create an AJAX request
const apiData = ajax('/api/data');

Для этого вида операторов мы можем применять Pipeable Operators . Разница между ними заключается в том, что они должны применяться к существующему оператору, создавая новый.

Представляя объединение серии этих конвейерных операторов, код будет записан в виде:

pipeableOperator3(pipeableOperator2(pipeableOperator(creatorOperator())))

По этой причине в Observables есть метод .pipe (), который выполняет то же самое, но гораздо легче читать:

creatorOperator().pipe(
  pipeableOperator1(),
  pipeableOperator2(),
  pipeableOperator3());
...