所以我已经阅读了Observables,甚至在我创建的应用程序中使用过它。所以这是我对Observable的理解 - 它是同步或异步或两者的连续数据流的包装。所以基本上它可以返回多个值。还有一个观察者与观察者相关联(订阅)。只要可观察执行接收到新值,观察者就会收到它。所以我有两个问题 -
如果你想返回多个值,为什么我们不为这些请求创建单独的promise,只需将它们放在promise.all中,所以当它们全部解析时,我们就拥有了我们需要的东西,而不是在可观察的情况下发出多个请求。
我们对它们中任何一个的使用取决于我们的用例,如果我们不确定何时,是否以及将要接收多少个值,那么当可观察时最有用。所以例如 - 如果我们正在听一个连接,我们接收足球比赛的现场评论,然后在我们的应用程序中显示它。在这里,我们不知道会收到多少回复。
我知道这是一个非常大的问题,但我必须陈述我现在所理解的一切,所以如果有任何不清楚的事情,有人会为我清楚。
先谢谢。
答案 0 :(得分:1)
好的,我可能在这里错了,但它们完全不同。这是我对它们之间差异的理解。
考虑到第一点,并且因为如果promise源不断增长,我们将永远不会达到解决状态,因为我们只能在promises中解析一次,这就是为什么observable在这里很好的原因。只要流有变化,他们就会做出反应
var a = async(b + c);
var d = wait for a;
what is d?
承诺知道我们只需要b + c。我们知道它会发生,但只有我们不知道什么时候才能等待。 无论有多少人在链中它最终会(解决)。 即使是连锁店
var a = async(b+c) + async (c+d)
var d = promise.all(a)
这是promise.all等待所有事情,但事情发生后(解决)之后没有必要等待承诺。因为我们不关心a会发生什么。
var a = 1 + 1 for every second;
var d = a + 1;
what is d?
在这里,我们永远不会知道它永远在变化的价值。我们只能读取当前值(观察)a并得到d的当前值。
var a = 1 + 1 for every second;
var d = observe(a) + 1;
但如果我们在这种情况下使用它,我们就不能使用promise.all
var a = 1 + 1 for every second;
var d = promise.all(a) + 1; //wont work
总有变化。所以我们必须永久等待。这就是promise.all和observables之间的区别。 抱歉这篇长篇文章。