Angular2 - 多次呼叫服务

时间:2017-07-31 15:13:30

标签: angular typescript angular-services

有多种方法可以多次调用服务吗?我想从我的数据库中加载一些数据,如果它是一个很长的列表,我想在每个请求中加载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);

}

有什么建议我怎么办? 提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

如果您希望一个接一个地依次执行nPromise次返回操作,则有几种方法。

语法上最令人愉快和可读的方法是用循环编写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;
}