Observable 和 Promise.all 之间的区别

Difference between Observable and Promise.all

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

  1. 如果你想 return 多个值,为什么我们不为每个请求创建单独的承诺,并简单地将它们放在 promise.all 中,所以当所有这些解决,我们有我们需要的,而不是在一个 observable 中发出多个请求。

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

我知道这是一个很大的问题,但我现在必须陈述我所理解的一切,所以如果有任何不清楚的地方,有人会为我解决。

提前致谢。

好吧,我在这里可能是错的,但它们的目的完全不同。这是我对它们之间区别的理解。

  • 主要区别在于 promise 只能被解析一次,所以即使你创建新的 promise 并推送它们,promise.all 的 .then 也只会在数组更改时触发 once.even它不会再解决。
  • Promise.all 用于固定长度的迭代,我们知道它有多大,而 Observable 用于连续增长的迭代(流等)。

考虑到第一点和第二点,如果 promise 源不断增长,我们将永远无法达到解决状态,因为我们只能在 promises 中解决一次,这就是为什么 observables 在这里很好。只要有变化,他们就会做出反应 stream

 var a = async(b + c);
 var d = wait for a;
 what is d?

承诺知道 d 我们只需要 b +c。我们知道它会发生,但我们不知道什么时候发生,所以我们只能等待。 最终(解决)链中有多少并不重要。 即使是链条

 var a = async(b+c) + async (c+d)
 var d = promise.all(a)

这是 promise.all 等待一切,但在它发生(解决)之后等待承诺是没有意义的 afterwards.since 我们不关心 a.

会发生什么
 var a =  1 + 1 for every second;
 var d = a + 1;
 what is d?

在这里我们永远不会知道 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 之间的区别。 很抱歉 post.