Уроки50. Project: autosave draft
Уроки · 50
50. Project: autosave draft
Проект 2 — автосохранение черновика
Похоже на typeahead, но с одним ключевым отличием: вместо switchMap здесь нужен concatMap.
Почему concatMap, а не switchMap
Для поиска старые результаты не нужны — их можно отменить. Для сохранения отменять нельзя: если данные уже ушли на сервер, отмена клиента ничего не отменит на сервере. Хуже того — если запустить два сохранения параллельно и второе закончится раньше, старый ответ может перезаписать новое состояние.
concatMap ставит сохранения в очередь: одно — после другого. Безопасно и предсказуемо.
Что нужно сделать
- В
createAutosave$внутриpipe:debounceTime(20),distinctUntilChanged(),concatMap(value => saveDraft(value)).
Детерминированная проверка
В этой задаче проверка идет через виртуальное время TestScheduler. Если решение верное, в консоли появится только Test Passed!. Не добавляйте лишние console.log, иначе проверка провалится.
Решение spoiler · click to reveal
const { debounceTime, distinctUntilChanged, concatMap } = Rx;
function createAutosave$(formValue$, saveDraft) {
return formValue$.pipe(
debounceTime(20),
distinctUntilChanged(),
concatMap(value => saveDraft(value))
);
} script.ts
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...