多个请求的Angular&rxjs测试API性能

时间:2018-07-22 22:20:59

标签: javascript angular rxjs

我想检查发送到API的多个请求的响应时间,而不是借助chart.js将其显示在图表上,但是我不确定自己是否做对了,因为响应无法进行并且我的代码仅在客户端收到用户输入的相同数量的响应时才在图表上添加点。

这里是负责向API发送请求并返回响应时间和数据权重的功能:

testRequests(numOfRequests, numOfRecords, db): Subject<any> {

const subject = new Subject();

for (let i = 1; i <= numOfRequests; i++) {
  const start_time = performance.now();
  this.http.get(BASE_URL + DATABASE + db + LIMIT + numOfRecords, {observe: 'response'}).subscribe((response) => {
    subject.next({
      time: performance.now() - start_time,
      weight: response.headers.get('Content-Length')
    });
  });
}

return subject;

}

这是func,它接收结果,并且当它具有用户请求的相同数量的响应时,它会指向图表:

makeTest(requestsAmount = 1, requestDB = 'aurora') {
const arrOfResults = [];
this.subscription = this.api.testRequests(requestsAmount, 5, requestDB).subscribe(
  result => {
    arrOfResults.push(result);
    if (arrOfResults.length === +requestsAmount) {
      this.lineChartData[0].data.push(arrOfResults[arrOfResults.length - 1].time);
      this.lineChartData[1].data.push(arrOfResults[arrOfResults.length - 1].weight * arrOfResults.length / 1024);
      this.lineChartLabels.push(arrOfResults.length + ' - ' + (requestDB === 'aurora' ? 'Aurora' : 'DynamoDB'));
      this.chart.chart.update();
    }
  },
  err => console.error(err),
  () => console.log('completed')
);

}

我听说不能保证请求会产生响应,并且响应可能丢失,所以我想改进我的代码,因此在缺少某些响应的情况下,它会在图表上生成点。

1 个答案:

答案 0 :(得分:0)

发生未处理的错误时,不会调用subscribe方法。您需要使用catch侦听器来处理错误事件。

下面的示例捕获所有错误并将其转换为null值。现在subscribe将收到响应或null

 this.http.get(BASE_URL + DATABASE + db + LIMIT + numOfRecords, {observe: 'response'})
       .catch((error, resp) => null)
       .subscribe((response) => {
             subject.next({
                  time: performance.now() - start_time,
                  weight: response ? response.headers.get('Content-Length') : 0
             });
       });