Уроки27. Как выбрать flattening operator
Уроки · 27
27. Как выбрать flattening operator
Закрепление: карта выбора
Теперь, когда вы видели все четыре flattening-оператора в действии, важно научиться выбирать нужный, исходя из бизнес-правила. Этот урок — упражнение на распознавание.
Шпаргалка
| Если нужно... | Оператор |
|---|---|
| запускать задачи параллельно, порядок неважен | mergeMap |
| сохранять порядок, ставить в очередь | concatMap |
| отменять устаревшее, брать последнее | switchMap |
| игнорировать новое, пока заняты | exhaustMap |
Принцип выбора
Нет «лучшего» оператора. Есть оператор, который точно описывает поведение, нужное бизнесу. Всегда отвечайте на вопрос: «что должно случиться, если придёт новое значение, пока работает старое?»
Что нужно сделать
- Внутри функции в
mapсоздайте объект-маппинг:parallel → mergeMap,queue → concatMap,latest → switchMap,busy → exhaustMap. - Верните строку
item.name + ': ' + operatorByStrategy[item.strategy]. - Ожидаемый вывод:
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
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...