Observable与Promise.all之间的差异

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

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

  1. 如果要返回多个值,为什么不为每个请求创建单独的promise,然后将它们简单地放入promise.all,所以当所有这些请求都解决时,我们就拥有了我们所需要的,而不是做出多个可观察的请求。

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

我知道这是一个非常大的问题,但是我必须说出我现在所理解的一切,因此,如果有任何不清楚的地方,有人会为我清除。

预先感谢。

javascript promise observable observers
1个回答
1
投票

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

  • 主要区别在于,promise只能被解析一次,因此即使您创建了新的promise并将其推入。then.pron.all将仅触发一次。即使数组更改它也不会再次解析。
  • Promise.all用于固定长度的可迭代项,我们知道它有多大,而Observable用于连续增长的可迭代项(流等)。

考虑点1,并考虑点2,如果承诺来源持续增长,我们将永远无法达到解决状态,因为我们只能在承诺中解决一次,这就是为什么可观察变量在这里是好的。只要有变化发生,他们就会做出反应

 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。所有都等待,但是在发生(解决)之后,就没有必要再等待promise。因为我们不在乎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之间的区别。对不起,很长的帖子。

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