【问题标题】:Angular&rxjs testing performance of API with multiple requestsAngular&rxjs 测试多个请求的 API 性能
【发布时间】:2018-07-22 22:20:59
【问题描述】:

我想检查发送到 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')
);

}

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

【问题讨论】:

    标签: javascript angular rxjs


    【解决方案1】:

    当出现未处理的错误时,不会调用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
                 });
           });
    

    【讨论】:

    • 试过了,我得到一个打字稿错误:属性'catch'不存在于类型'Observable>'。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多