有多种方法可以多次调用服务吗?我想从我的数据库中加载一些数据,如果它是一个很长的列表,我想在每个请求中加载1000个条目,如果我这样做:
while(!done){...}
我会收到许多不需要的DB请求,但我可以获取所有数据。
这是我在 component.ts
上的方法lazyLoadData(): void {
this.getUntil += 1000;
if (this.getUntil > this.totalEntries) {
this.getUntil = this.totalEntries;
}
this.salesService.GetEDISalesReportDetailListLazy(this.id, this.getFrom, this.getUntil)
.then(data => {
if(this.dataTable == null) {
this.dataTable = [];
this.dataTable = data;
this.isDataTableAvailable = true;
this.status = this.dataTable.aaData[0].Status;
} else {
for(let i = 0; i< data.aaData.length; i++){
this.dataTable.aaData.push(data.aaData[i]);
}
this.getFrom = this.getUntil;
}
});
}
这是我的 service.ts
GetEDISalesReportDetailListLazy(id: number, startFrom: number, until: number): any {
return this.http2.post(SERVICE_URL + 'Sales/GetEDISalesReportDetailListLazy', { id: id, startFrom: startFrom, until: until }, this.options)
.toPromise()
.then(response => {
return response.json().ReturnStatus.ReturnObject;
})
.catch(this.handleError);
}
有什么建议我怎么办? 提前感谢您的帮助。
答案 0 :(得分:2)
如果您希望一个接一个地依次执行n
次Promise
次返回操作,则有几种方法。
语法上最令人愉快和可读的方法是用循环编写async
函数并在循环中使用await
,如此。
async function f(n) {
for (let i = 0; i < n; i += 1) {
const response = await fetch('api/items?page=' + i);
}
}
我们可以在没有async
/ await
糖的情况下执行此操作,但这是一个海报儿童用例。
没有语法糖,我们可以写
function f(n) {
for (let i = 0, p = Promise.resolve(); i < n; i += 1) {
p = p.then(() => fetch('api/items?page=' + i));
}
return p;
}