Что это значит, говоря, что «rxjs наблюдаемый» принимает несколько, а обещание не - PullRequest
0 голосов
/ 03 февраля 2019

Я знаю, как работают обещания и observables, но я не уверен, когда люди говорят, что наблюдаемое может многократным событием, в то время как promise принимает только одно событие за раз.

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

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Observable может выдавать разные значения в разное время, Promise может разрешать только одно значение за один раз (и затем никогда).

Простая иллюстрация:

Давайте попробуем получитьтри асинхронных результата: «a», «b» и «c», каждый с задержкой еще на 1 секунду.С наблюдаемой это можно сделать следующим образом:

var result = Rx.Observable.create((observer) => {
    setTimeout(() => observer.next("a"), 1000);
    setTimeout(() => observer.next("b"), 2000);
    setTimeout(() => (observer.next("c"), observer.complete()), 3000);
});
result.subscribe(x => console.log(x));  

Выше приведенный результат приведет к тому, что каждая строка появится на 1 секунду позже предыдущей:

a
b
c

Если вы попытаетесьсделать это с одним (!) обещанием, оно не будет работать:

var result = new Promise(resolve => {
    setTimeout(() => resolve("a"), 1000);
    setTimeout(() => resolve("b"), 2000);
    setTimeout(() => resolve("c"), 3000);
});
result.then(x => console.log(x));

Это будет выводить только один результат (через 1 секунду):

a

Даже при наличиипопытаться выполнить обещание также с помощью «b» и «c», что не работает: обещание может быть выполнено только один раз.Все последующие вызовы resolve игнорируются.

Наблюдаемая, однако, может излучать несколько раз, и каждый раз с другим значением.

Обещание прекрасно, когда вам нужен один (возможно, сложный) асинхронный результат.Наблюдаемое больше подходит, когда вы ожидаете серию асинхронных результатов.

0 голосов
/ 03 февраля 2019

По сути, обещание разрешается до значения или отклоняется до ошибки.

С другой стороны, можно наблюдать оболочку для потока значений, которые могут быть распределены по времени.Например, наблюдаемая привязка к щелчку мыши или к веб-сокету

В угловом выражении http get observable ведет себя like* обещание в том, что оно возвращает только одно значение.

Я уверен, что кто-то может привести вас к более глубоким объяснениям, но это, по сути, суть вещей.

...