何时使用Promise over可观察的?

Nim*_*oel 8 promise observable rxjs ecmascript-6 angular

在任何情况下,Promise都比可观察的功能更强大吗?我知道可观察变量比承诺具有很多好处。但是无论如何,我应该只对可观察对象使用诺言。

我发现了这个链接,promise vs observables。但是,这始终向我展示了可观察性优于承诺的优势。我想知道诺言比可观察的好处。

Est*_*ask 7

可观察者可以做承诺所要做的一切,甚至更多。始终可以使用toPromise()方法将其切换到承诺,以防出现承诺。

如果观察者必须选择一个观察者

  • 需求是可观测变量固有的,不是承诺的并且在相关问题中进行了详细说明的任何特征(特别是取消订阅,不完整的可观测变量和接收多个值的可观测变量)
  • 使用它的API期望可观察到的并且不使用Observable.from(...)安全结构来统一可观察到的和应许的

如果使用可观察对象的代码专门使用可观察对象,可以选择一个可观察对象不是一个承诺。

如果使用承诺的API期望承诺并且不使用安全结构,则必须在可观察对象上选择承诺Observable.from(...)

如果有可能,可以选择诺言不是观察

  • 使用代码的地方专门使用promises(特别是async功能)
  • 根据设计需要是异步的
  • 它需要被立即订阅和链接然后,由于链应观测被打破let observable = ...; observable.subscribe(...); return observable(这也需要多个预订的情况下,要被追踪的可观察到的是可取消)

  • 对此进行小更新:“toPromise()”现已弃用。但您可以使用“lastValueFrom”或“firstValueFrom” https://indepth.dev/posts/1287/rxjs-heads-up-topromise-is-being-deprecated (2认同)

For*_*stG 6

在以下情况下,使用Promise而不是Observable:

  • 无论如何,您都需要处理(未来响应)事件(不取消订阅,不取消:订阅后,将有一个100%的答案,而您将必须处理它100%的代码,该代码被执行)
  • 一个订阅=一个事件处理:源中只有一个事件,因此将来的响应和完成是同一事件。

在以下情况下,使用Observable代替Promise:

  • 您希望能够接受来自同一来源的多个事件
  • 您需要一个“我已完成此事件流”处理程序
  • 您希望能够取消订阅可能永远不会结束的数据流,然后随时重新订阅(这也意味着您可能根本不需要完成订阅:例如,如果10秒钟内没有任何反应,让我们取消订阅,没有人会处理较晚的答案)
  • 您想使用RxJS“流API”来预处理响应数据。

通常,可观察模式是扩展的Promise模式,具有更多工具和功能。由您决定是否将代码限制为Promises。它首先是一个自定义库,然后被包含在ES2016中

另外,我建议研究具有特定问题参数的问题:您需要更快的应用程序吗?您将使用旧版模块吗?