Angular2中Http的承诺与可观察性?

Angular2中Http的承诺与可观察性?,http,angular,promise,observable,Http,Angular,Promise,Observable,本质上,正如标题所说,是否有任何理由为了进行http调用而使用?这似乎是不必要的过度复杂化,因为所有的调用都是成功或失败的,实际上没有真正的理由取消它。问这个问题是为了典型的用例,而不是为了debounce的典型可观察销售宣传(具有讽刺意味的是,ng debounce做得很好,没有打无用的电话) 观测值有一个巨大的优势,这在这里非常相关 Observable支持取消,而Promise不支持取消 使用subscribe()和map(),而不是then()似乎不会给我带来太多麻烦。 您还可以使用to

本质上,正如标题所说,是否有任何理由为了进行http调用而使用?这似乎是不必要的过度复杂化,因为所有的调用都是成功或失败的,实际上没有真正的理由取消它。问这个问题是为了典型的用例,而不是为了debounce的典型可观察销售宣传(具有讽刺意味的是,ng debounce做得很好,没有打无用的电话)

观测值有一个巨大的优势,这在这里非常相关

Observable
支持取消,而
Promise
不支持取消

使用
subscribe()
map()
,而不是
then()
似乎不会给我带来太多麻烦。 您还可以使用
toPromise()
获得您需要的
承诺

有关更多详细信息,请参见


此外,如果使用FRP风格的编程,则可以方便地在任何地方获得可观察到的结果。如果不希望这样做,只需使用
toPromise()
即可提供
承诺和稍微简单的API。

承诺和可观察之间最基本的区别是,如果没有订阅任何功能,可观察模块将无法工作。因此减少了服务器的负担

在promise中,无论您是否真正使用响应,它都会在ping您的请求和负载后向您发送promise对象;这有时是不可取的


其目的是降低节点或其他服务器的负载

同意,但一旦订阅了流,就无法链接任何异步函数以在解析后添加行为。在我看来,observable并不是http调用的最佳选择,当一个简单的承诺已经足够并且可以链接时,它们会导致样板创建。只需使用
map()
而不是
subscribe()
。您还可以使用
toPromise()
,然后获得
then()
。有了可观察的东西,你就可以得到一切,而有了承诺,你只会得到没有明显好处的部分(IMHO)。同样,通过失败的请求来建立某种恢复力要容易得多。@GünterZöchbauer,如果你调用toPromise,为什么不使用承诺呢?使用toPromise,你就是在使用承诺^^。我从来没有说过你不应该放弃可观察的,只是把它们转换成http使用的承诺。它真的更有价值。顺便说一句,有了映射,你就无法清楚地处理错误。别忘了当我们有更多订阅者时,重复的http调用——你可以加热observable,这意味着更多的样板文件。最明显的原因是http使用observable,而不是承诺。这是一条最省力的路径。你可以使用异步函数的承诺,可观察的对象有望很快获得
Symbol.toAsyncIterator
,并允许
用于。。。等待
,但这可能需要一段时间。在什么情况下,在不使用响应的情况下设置角度http调用?那对我来说毫无意义。我理解延迟加载,但不理解它在这里的适用性。不想表现得粗鲁,只是真的不明白人们为什么把这当作一个论点。这并不意味着请求会被发送,但响应会被忽略。您可以有一系列不同的方法,使用
map()
filter()
replay()
flatMap()
等等构建可观察对象,但您可能出于任何原因决定根本不想发出请求,或者在满足某些条件后,有时不想发出请求。这就像一个SQL查询,您可以预先准备和构建,只按需发送或重复发送。如果两个不同的客户端订阅了它,它将工作两次,并将延迟调用,直到您真正需要它。