将可观察的转换为承诺

时间:2018-09-10 12:11:43

标签: javascript angular promise observable

将可观察对象转换为承诺是一种好习惯,因为可观察对象几乎可以在所有场合使用,而不是承诺?

我最近开始学习angular,并在工作场所的一个新项目(Angular 5)中遇到了以下代码片段。此代码段用于加载数据列表,例如客户列表。此客户列表数据集是一次性动作而不是流。因此,使用诺言没有技术限制。但我想知道是否有任何缺点或限制。

  getViewDataForPage(): Promise<any> {
    return this.commonDataService.getViewDataForPage(args_set)
      .toPromise()
      .catch(error => this._exceptionService.catchBadResponse(error));
  }


  //in commonDataService.ts
  getViewDataForPage(args_set): Observable<any> {
    /** logic goes here */
    return this.httpConnection.post(viewDataRequest, args);
  }

2 个答案:

答案 0 :(得分:0)

这取决于您的要求,技术上可观察到的结果要比承诺要好,因为它们提供了Promise等功能。使用Observable,您不想对多个事件进行任何处理都没有关系。

Observables可取消的,即,使用unsubscibe()可以取消可观察值的状态。

另一方面,

Promises仅处理1个异步事件,即,如果发生错误,它将解决或拒绝

例如,如果您要处理一个偶数,Promise的一个好地方。

let connect=new Promise((resolve,reject)=>{

if( connection Passed){
   resolve("Connected");
 } else{
   reject("failed");
 }
}

答案 1 :(得分:0)

您可以同时使用。 Observable (可观察性)用于当您打算在一段时间内接收不同的值时,就像您是某本杂志中的下标时一样, mazagazine < / strong>具有新版本,您将成为通知者,所有下标者都会遇到同样的情况,每个人都会获得新的价值,或者在这种情况下,每个人都会获得新的杂志

Promise 的情况下,它是异步的,就像可观察到的,但它只是发生了。

然后,如果在这种情况下会发生以下代码,则承诺

getViewDataForPage(): Promise<any> {
    return this.commonDataService.getViewDataForPage(args_set)
      .toPromise()
      .catch(error => this._exceptionService.catchBadResponse(error));
  }


  //in commonDataService.ts
  getViewDataForPage(args_set): Observable<any> {
    /** logic goes here */
    return this.httpConnection.post(viewDataRequest, args);
  }