将可观察对象转换为承诺是一种好习惯,因为可观察对象几乎可以在所有场合使用,而不是承诺?
我最近开始学习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);
}
答案 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);
}