Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: асинхронность, rxjs

В чем различие между Observable и Promise? Где применяется каждый из этих паттернов?

Этот вопрос проверяет понимание двух важных концепций работы с асинхронностью в JavaScript и их различия.

Короткий ответ

Promise — это объект, который работает с одним значением или ошибкой, и его результат может быть получен только один раз. Он идеален для однократных асинхронных операций, таких как запросы к API. Observable позволяет работать с множественными значениями и управлять подписками на поток данных, что делает его полезным для событий, потоков данных или длительных операций. Основное различие — в многократности значений и возможностях управления потоком.

Длинный ответ

Promise и Observable — это два разных подхода к работе с асинхронным кодом в JavaScript.

  • Promise:
    Promise представляет собой конечную операцию, которая либо успешно завершится (выполнится resolve), либо завершится с ошибкой (выполнится reject). Когда вы создаёте Promise, вы ожидаете одно событие, например завершение запроса API:

    const fetchData = new Promise((resolve, reject) => {
    	setTimeout(() => {  
    		resolve('Data loaded');  
    	}, 1000); 
    }); 
    fetchData.then(data => console.log(data)); // "Data loaded"

    Promise удобно использовать, когда вы ожидаете только один результат.

  • Observable:
    Observable используется для работы с потоками данных, которые могут изменяться с течением времени. Это позволяет вам подписываться на события и получать множественные значения. Главное преимущество — управление подписками, отмена и многократные обновления:

    const { Observable } = require('rxjs'); 
    const dataStream = new Observable(observer => {
    	observer.next('First value');  
    	setTimeout(() => observer.next('Second value'), 1000);  
    	setTimeout(() => observer.complete(), 2000); 
    }); 
    dataStream.subscribe({
    	next: value => console.log(value),  
    	complete: () => console.log('Stream completed'), 
    });

    В этом примере данные передаются несколько раз, что делает Observable полезным для работы с реальными потоками, такими как события пользователя, WebSocket соединения или непрерывные обновления данных.

Где применять:

  • Используйте Promise, когда вам нужно получить одно значение или результат асинхронной операции (например, загрузка данных с сервера).

  • Используйте Observable, когда нужно работать с множественными значениями с течением времени или когда важна возможность отмены подписки на поток данных.

Уровень

  • Рейтинг:

    3

  • Сложность:

    8

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#асинхронность

#rxjs

Подпишись на React Developer в телеграм