Observable和Promise.all之间的区别

时间:2017-09-07 14:28:36

标签: javascript promise observable observers

所以我已经阅读了Observables,甚至在我创建的应用程序中使用过它。所以这是我对Observable的理解 - 它是同步或异步或两者的连续数据流的包装。所以基本上它可以返回多个值。还有一个观察者与观察者相关联(订阅)。只要可观察执行接收到新值,观察者就会收到它。所以我有两个问题 -

  1. 如果你想返回多个值,为什么我们不为这些请求创建单独的promise,只需将它们放在promise.all中,所以当它们全部解析时,我们就拥有了我们需要的东西,而不是在可观察的情况下发出多个请求。

  2. 我们对它们中任何一个的使用取决于我们的用例,如果我们不确定何时,是否以及将要接收多少个值,那么当可观察时最有用。所以例如 - 如果我们正在听一个连接,我们接收足球比赛的现场评论,然后在我们的应用程序中显示它。在这里,我们不知道会收到多少回复。

  3. 我知道这是一个非常大的问题,但我必须陈述我现在所理解的一切,所以如果有任何不清楚的事情,有人会为我清楚。

    先谢谢。

1 个答案:

答案 0 :(得分:1)

好的,我可能在这里错了,但它们完全不同。这是我对它们之间差异的理解。

  • 主要的不同之处在于承诺只能被解决一次,所以如果即使你创建了新的承诺并将它们推到了承诺的.then,那么它只会触发一次。如果数组改变它就不会再解决。< / LI>
  • Promise.all用于固定长度迭代,我们知道它有多大,而Observable用于连续增长的迭代(流等)。

考虑到第一点,并且因为如果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之间的区别。 抱歉这篇长篇文章。

相关问题