chr*_*lee 36 javascript promise es6-promise
所以我读过,在一些即将推出的JavaScript MVC中,observable正在寻求超越承诺:
观察与承诺之间有什么区别?
更新:道歉!删除了我的虚假陈述.
Fel*_*ing 35
观察与承诺之间有什么区别?
简单地说:一个promise以异步方式解析为单个值,一个observable异步解析(或发出)多个值(随着时间的推移).
具体例子:
可以在此处找到更多信息:http://reactivex.io/intro.html
我读过,观察者正在寻求超越承诺
不太可能.对于某些问题,Observable可能是更好的解决方案,但这并不能使承诺过时(如果这就是你的意思).
Moe*_*eri 35
承诺是未来价值的代表.可观察量是可能无限量的值的表示.
Promise会在创建后立即触发获取该值.Observable只会在您订阅它们时开始生成值.(除非它是一个热门的观察者,但这超出了这个问题的范围)
Promise旨在表示AJAX调用.Observable旨在表示任何事物:事件,来自数据库的数据,来自ajax调用的数据,(可能是无限的)序列等.
小智 24
Promise提供了一种非常简单的回调机制,其中Rx提供了对异步编程的强大抽象.Observable表示数据流,然后我们可以应用运算符来定义如何处理传入数据.
如果您只需要发出HTTP请求然后更新UI组件,那么使用Promise就足够了.
但是,大多数应用程序往往需要比这更复杂的需求(即使它在第一时间并不明显).以我们的HTTP请求为例,让我们看看如何将它建模为Observable并使用一些Rx运算符可以帮助我们:
- 如果HTTP请求是由用户操作触发的,我们可能需要警惕触发多个HTTP请求(假设用户在搜索框中键入内容).我们不想火每次击键的要求,所以我们可能要节流我们的搜索,所以我们只有在用户停止输入300毫秒火的请求.此外,如果用户键入一个单词,等待300毫秒,并添加另一个字符,我们将触发后续的HTTP请求.有了Promise,我们可能会遇到竞争条件,因为我们无法控制我们收到回复的顺序,也无法取消旧的请求.Rx通过允许我们在流之间切换来解决这个问题,在我们不再关心的旧请求订阅上调用Dispose.我们还可以过滤掉任何无效的搜索输入,例如当搜索词的长度小于3个字符.
- 支持处理超时/错误处理.假设我们的HTTP请求失败,Rx允许我们轻松地重试发出请求.
- 假设我们的应用程序的几个部分需要进行相同的HTTP调用,我们可能不希望实际调用多次.我们可以将我们的observable暴露给多个消费者并使用Replay来确保调用一次,并为后续订阅者缓存结果.我们甚至可以为Replay提供TimeSpan,为我们提供过期的缓存行为.
- 通过使用调度程序对线程进行强大的抽象,这允许我们控制并发性.更好的是,我们可以在单元测试中使用测试调度程序来控制时间,允许我们模拟超时,竞争条件等.
这些是一些快速示例,用于演示可能的内容.Rx框架中有许多运算符可以满足所有类型的场景,Rx的可组合性意味着您可以轻松地组合运算符来定义所需的行为.创建自己的可重用运算符也很容易(例如RetryAfterDelay).
总而言之,Rx可以完成除Promise所能做的所有事情,而且远远更多.我怀疑在接下来的几年里会继续转向Rx而不是Promises.
为了进一步阅读,我建议您查看Angular 2指南中有关Observables的部分.
当您想要获取单个数据块时,转换为Promise通常是一个不错的选择.所以当你收到数据时,你已经完成了.
但在某些情况下,请求并不总是只进行一次.您可以在服务器响应第一个请求之前启动一个请求,取消它并发出不同的请求.
例如,在搜索组件中当用户在搜索框中键入名称时,您将通过该搜索查询重复发出HTTP请求.
使用Promises很难实现请求 - 取消 - 新请求序列,但使用Observable很容易.
因此,如果您的组件只使用一个请求获取数据,那么它是一个很好的选择,Promise
但如果它有一个请求 - 取消 - 新请求链,您应该使用observable
归档时间: |
|
查看次数: |
19547 次 |
最近记录: |