【问题标题】:Difference between Observable and Promise.allObservable 和 Promise.all 的区别
【发布时间】:2018-02-16 08:15:51
【问题描述】:

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

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

我知道这是一个很大的问题,但我必须说出我现在所了解的一切,所以如果有什么不清楚的地方,有人会为我解决。

提前致谢。

【问题讨论】:

    标签: javascript promise observable observers


    【解决方案1】:

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

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

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

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

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

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

    这是 promise.all 等待一切,但是在它发生之后(解决)没有必要再等待 promises。因为我们不在乎 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 之间的区别。 很抱歉发了这么长的帖子。

    【讨论】:

    • 感谢 Shyam 的回复。我确实明白你所说的,一旦任何单个承诺在解决(或拒绝)中具有价值,它就会返回并且永远不会回去进行更改。因此,如果 promise.all 中有多个 Promise,则当所有 Promise 都解决时,将调用 .then()。这就是为什么我提出第二点评论我们任务的用例(目的)。我认为我们可以得出结论,如果您正在寻找连续的数据流,则使用 observables 并使用 promise.all 当您想要在所有承诺解决后做某事时使用。
    猜你喜欢
    • 1970-01-01
    • 2017-07-09
    • 2018-02-05
    • 2016-10-16
    • 1970-01-01
    • 2016-05-21
    • 2016-09-18
    • 1970-01-01
    • 2017-11-15
    相关资源
    最近更新 更多