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. Это нормально и ожидаемо.
Что нужно сделать
- Замените
Rx.EMPTYнаfrom(promise). - Логи
StartиEndуже есть — не трогайте их, они показывают порядок. - Ожидаемый порядок:
Start → End → Result: DATA.
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');