BACK
Уроки27. Как выбрать flattening operator
Уроки · 27

27. Как выбрать flattening operator

Закрепление: карта выбора

Теперь, когда вы видели все четыре flattening-оператора в действии, важно научиться выбирать нужный, исходя из бизнес-правила. Этот урок — упражнение на распознавание.

Шпаргалка

Если нужно... Оператор
запускать задачи параллельно, порядок неваженmergeMap
сохранять порядок, ставить в очередьconcatMap
отменять устаревшее, брать последнееswitchMap
игнорировать новое, пока занятыexhaustMap

Принцип выбора

Нет «лучшего» оператора. Есть оператор, который точно описывает поведение, нужное бизнесу. Всегда отвечайте на вопрос: «что должно случиться, если придёт новое значение, пока работает старое?»

Что нужно сделать

  1. Внутри функции в map создайте объект-маппинг: parallel → mergeMap, queue → concatMap, latest → switchMap, busy → exhaustMap.
  2. Верните строку item.name + ': ' + operatorByStrategy[item.strategy].
  3. Ожидаемый вывод: parallel uploads: mergeMap → ordered saves: concatMap → typeahead search: switchMap → login button: exhaustMap.
Решение spoiler · click to reveal
const { from, map } = Rx;

const scenarios = [
  { name: 'parallel uploads', strategy: 'parallel' },
  { name: 'ordered saves', strategy: 'queue' },
  { name: 'typeahead search', strategy: 'latest' },
  { name: 'login button', strategy: 'busy' },
];

const result$ = from(scenarios).pipe(
  map(item => {
    const operatorByStrategy = {
      parallel: 'mergeMap',
      queue: 'concatMap',
      latest: 'switchMap',
      busy: 'exhaustMap',
    };

    return item.name + ': ' + operatorByStrategy[item.strategy];
  })
);

result$.subscribe(value => console.log(value));
script.ts // TypeScript
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...