获取http调用承诺中返回的数据的Rxjs Observable
Getting Rxjs Observable of data returned in http call promise
我正在尝试使用 ngx-pagination,但遇到的问题很少。我是 angular 2 的新手,对可观察对象和订阅者知之甚少。
我有一项服务可以进行 http 调用和 returns 数据:
getData(path: string, page: number=1) : Promise<IData[]> {
return this.http.get(path+'&pageNumber='+page)
.toPromise()
.then(response => {
return response.json() as IData[];
});
}
我正在我的组件中使用这些数据:
getDataValues(page: number) {
this.loading = true;
this.asyncData = this.getAsyncData(this.queryPath, page)
.do(res => {
this.total = res.total;
this.p = page;
this.loading = false;
})
.map(res => res.items);
}
getAsyncData(path: string, page: number): Observable<any> {
return Observable
.of({
items: this.repository.getData(path, page),
total: this.dataValues.length
});
}
我的模板如下所示:
<div class="list">
<div>
<article class="entity" *ngFor="let data of asyncData | async | paginate: { id: 'server', itemsPerPage: 10, currentPage: p, totalItems: total }">
</article>
</div>
<pagination-controls (pageChange)="getDataValues($event)" id="server"></pagination-controls>
我知道这是不正确的,因为我需要等待承诺解决,但我不知道该怎么做。 ngx-pagination 期望 Observable 所以 asyncData
需要是一个 Observable
如果您查看旧 Angular http 服务(您正在使用的服务,较新的称为 HttpClient)的 'get' 方法的类型签名,您会看到它 returns 一个 'Response'.
类型的 Observable
get(url: string, options?: RequestOptionsArgs): Observable<Response>;
因此,只需从 get 调用中删除 .toPromise() 和 .then 方法,您就可以使用 Observable。
我正在尝试使用 ngx-pagination,但遇到的问题很少。我是 angular 2 的新手,对可观察对象和订阅者知之甚少。
我有一项服务可以进行 http 调用和 returns 数据:
getData(path: string, page: number=1) : Promise<IData[]> {
return this.http.get(path+'&pageNumber='+page)
.toPromise()
.then(response => {
return response.json() as IData[];
});
}
我正在我的组件中使用这些数据:
getDataValues(page: number) {
this.loading = true;
this.asyncData = this.getAsyncData(this.queryPath, page)
.do(res => {
this.total = res.total;
this.p = page;
this.loading = false;
})
.map(res => res.items);
}
getAsyncData(path: string, page: number): Observable<any> {
return Observable
.of({
items: this.repository.getData(path, page),
total: this.dataValues.length
});
}
我的模板如下所示:
<div class="list">
<div>
<article class="entity" *ngFor="let data of asyncData | async | paginate: { id: 'server', itemsPerPage: 10, currentPage: p, totalItems: total }">
</article>
</div>
<pagination-controls (pageChange)="getDataValues($event)" id="server"></pagination-controls>
我知道这是不正确的,因为我需要等待承诺解决,但我不知道该怎么做。 ngx-pagination 期望 Observable 所以 asyncData
需要是一个 Observable
如果您查看旧 Angular http 服务(您正在使用的服务,较新的称为 HttpClient)的 'get' 方法的类型签名,您会看到它 returns 一个 'Response'.
类型的 Observable get(url: string, options?: RequestOptionsArgs): Observable<Response>;
因此,只需从 get 调用中删除 .toPromise() 和 .then 方法,您就可以使用 Observable。