其中,承诺不什么意思说“rxjs观察的”需要多

问题描述 投票:0回答:2

我知道如何承诺和observables工作,但我不知道,当人们说,观察到可以将多个事件而promise只需要一个事件在一个时间。

我抬起头来互联网上,但我不能够找到与例如定义来理解它究竟意味着。

javascript ecmascript-6 rxjs es6-promise
2个回答
2
投票

可观察到的能发出在不同的时间不同的值,许诺只能解析到一个值,在同一时间(然后再也没有)。

简单的例子:

让我们试着去得到三个异步结果:“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所有后续调用将被忽略。

然而可观察到的可发出数次,并用不同的值的每个时间。

当你需要一个(可能是复杂的)异步结果的承诺是巨大的。当你想到了一系列的异步结果可观察到的是比较合适的。


2
投票

从本质上讲,一个承诺解析为一个值或拒绝的错误。

可观察到的,另一方面是用于值的流,其可以在时间上被分发的包装。例如,可观察到结合到鼠标点击或到WebSocket

在角中,HTTP GET观察到的行为like*,因为它仅返回一个值的承诺。

我相信有人能引导你更深入的解释,但这个本质是事物的症结所在。

© www.soinside.com 2019 - 2024. All rights reserved.