BACK
Уроки8. from: Promise
Уроки · 08

8. from: Promise

RxJS и Promise — друзья

Promise — это стандартный способ работать с асинхронными значениями в JavaScript. Он отлично подходит для одиночного результата (например, ответа HTTP-запроса). RxJS умеет «обернуть» Promise в Observable, чтобы дальше работать с ним в едином стиле.

Что делает from(promise)

Получившийся Observable отправит одно значение (результат Promise) и сразу вызовет complete. Если Promise отклонится — будет сигнал error.

Главное правило асинхронности

В JavaScript весь синхронный код выполняется первым. И только потом — содержимое Promise, таймеров и других микрозадач. Поэтому даже если Promise уже «готов» (Promise.resolve(...)), его обработчик встанет в очередь и выполнится после ближайших синхронных строк.

Порядок в этом уроке

Сначала выведется Start, затем End, и только потом — Result: DATA. Это нормально и ожидаемо.

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

  1. Замените Rx.EMPTY на from(promise).
  2. Логи Start и End уже есть — не трогайте их, они показывают порядок.
  3. Ожидаемый порядок: Start → End → Result: DATA.
Решение spoiler · click to reveal
const { from } = Rx;

console.log('Start');

const promise = Promise.resolve('DATA');
const result$ = from(promise);

result$.subscribe(value => {
  console.log('Result: ' + value);
});

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