Angular: ошибка 500 при использовании forkJoin для вызова служб API - PullRequest
0 голосов
/ 04 марта 2020

Я реализую вызов в ngOnInit для двух API-маршрутов, чтобы получить некоторые данные, я использую angular 7 и реализую forkJoin для вызова API, как это:

  ngOnInit() {
    debugger
    this.route.params.pipe(
      switchMap(params => forkJoin([
        this.http.get('/api/surveys/' + params.id),
        this.http.get('/api/surveys/getStatistics/' + params.id)
      ]))
    ).subscribe(result => {
      this.survey = result[0];
      this.statistics = result[1];
      this.updateChart(result[1]);
    }, 
      error => this.handleError(error)
    );
  }

private handleError(error) {
  debugger
  if (error.status === 400) {
    this.showError(error.error.error, 'Erreur!');
    if (error.error.error === 'Le sondage demandé n\'existe plus!') {
      this.router.navigateByUrl('/sondage');
    }
  }
}

private updateChart(statistics) {
  debugger
  statistics.options.forEach(option => {
    this.pieData.push(option.number);
    option.color = this.d3Colors[this.colorCounter];
    this.colorCounter = this.colorCounter + 1;
  });  
}

после первого отладчика код не запускает запрос вызова к API и передается напрямую в функцию handleError! и сгенерировать 500 ошибок сервера

1 Ответ

0 голосов
/ 04 марта 2020

500 - это обычно ошибка, генерируемая самим сервером API. Если ваш дизайн позволяет, вы должны разделить оба вызова API. Таким образом, сбой первого вызова не повлияет на второй вызов.

Из спецификаций forkJoin: «Если в какой-то момент произойдут какие-либо входные наблюдаемые ошибки, forkJoin также выдаст ошибку, и все другие наблюдаемые будут немедленно отписаны.»

Таким образом, сбой одного вызова вызывает другой вызов API успех не имеет значения, так как наблюдаемый уже отписался.

...