Javascript 将可观察的转化为承诺

Javascript 将可观察的转化为承诺,javascript,angular,promise,observable,Javascript,Angular,Promise,Observable,将可观察的对象转换为承诺是否是一种良好的实践,因为可观察的对象几乎可以在所有场合而不是承诺中使用 我最近开始学习angular,在我的工作场所的一个新项目(angular 5)中遇到了下面的代码片段。此代码段用于加载数据列表,如客户列表。此客户列表数据集作为一次性操作而不是流接收。因此,使用promise没有技术限制。但我想知道是否有任何缺点或局限性 getViewDataForPage(): Promise<any> { return this.commonDataSe

将可观察的对象转换为承诺是否是一种良好的实践,因为可观察的对象几乎可以在所有场合而不是承诺中使用

我最近开始学习angular,在我的工作场所的一个新项目(angular 5)中遇到了下面的代码片段。此代码段用于加载数据列表,如客户列表。此客户列表数据集作为一次性操作而不是流接收。因此,使用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);
  }
getViewDataForPage():承诺{
返回此.commonDataService.getViewDataForPage(参数集)
.toPromise()
.catch(错误=>此._exceptionService.catchBadResponse(错误));
}
//在commonDataService.ts中
getViewDataForPage(参数集):可观察{
/**逻辑就在这里*/
返回此.httpConnection.post(viewDataRequest,args);
}

这取决于您的需求,技术上的可观察性优于承诺,因为它们提供了承诺等功能。使用Observable,您是否希望处理多个事件中的无事件并不重要

可观察对象
是可取消的即,使用
unsubsibe()
可以取消可观察对象,而不管其状态如何

承诺
另一方面,只处理1个异步事件,即,如果发生错误,它将解决或拒绝

例如,如果您有一个偶数要处理,则是履行承诺的好地方

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

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

两者都可以使用。可观察的用于您将在这段时间内收到不同的值,这更像是您是某杂志的订阅者,当mazagazine有新版本时,您将收到通知,所有订户也会收到通知,每个人都会收到新的价值,或者在本例中是新杂志

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);
  }
getViewDataForPage():承诺{
返回此.commonDataService.getViewDataForPage(参数集)
.toPromise()
.catch(错误=>此._exceptionService.catchBadResponse(错误));
}
//在commonDataService.ts中
getViewDataForPage(参数集):可观察{
/**逻辑就在这里*/
返回此.httpConnection.post(viewDataRequest,args);
}

看看这里:谢谢您的推荐。是的,我之前读过这篇文章。它的答案也有一些相互矛盾的想法。这就是为什么我要单独问这个问题,以便了解性能下降等方面的任何附加细节。相互矛盾的想法:“如果你想使用反应式风格,就在任何地方都使用可观察到的。如果你只有可观察到的,你就可以轻松地组合。如果你将它们混合在一起,它就不再那么干净了。”“我只是说,我相信人们在NG2中主要通过http接触到observable,没有任何真正的理由使用observable而不是Promission来进行呼叫。”我的问题是订阅observable的情况下,在使用前将其转换为promise是一种好的做法吗?您已经提到过”技术上的可观察性比承诺要好“。这是否意味着将观察值转换为承诺值不是一个好的决定?这不是一个好的决定,也不是一个突出的决定,因为你在观察值上得到了多个操作符,如map、filter、tap等。此外,你可能会遇到必须取消该观察值的情况,对于某些场景,您的代码的自动化测试在图片中,您可能需要取消并执行@DonDYes执行的否定测试,正如我在问题中提到的,我知道这将只执行一次,并且不会出现错误。但我想考虑其他方面,比如表演。