Nano Hash - криптовалюты, майнинг, программирование

Ошибка группировки Angular Multiple Http Call для родительского наблюдаемого метода

У меня есть вопрос относительно нескольких HTTP-вызовов и отлова ошибок, когда они происходят, и возможности их чтения на родительском компоненте. Мне нужно знать, какие вызовы завершились неудачно, чтобы я мог повторить их с помощью другого метода, но если я не вижу их на уровне компонентов. Мне почему-то невозможно узнать, какой вызов мне нужно повторить.

// ВЫЗОВ КОМПОНЕНТА

generateDocuments(documentType: DocumentType, validDocuments: DocumentTemplate): observable<any>{
return this.documentService.generateDocuments(clientId, ClientDescription,documentType, validDocuments)}

//СЕРВИСНЫЙ ЗВОНОК:

generateDocuments(clientId: int, ClientDescription,documentType:DocumentType, validDocuments: DocumentTemplate): observable<any>{

switch(documentType){

documentType.Word:{
return this.getDocumentCall(clientId, ClientDescription, ...)}

documentType.Excel:{
return this.getDocumentCall(clientId, ClientDescription, ...)}
}

// Эта строка будет выдавать ошибку/успех один за другим в зависимости от завершения вызова

 private getDocumentCall(clientId: int, clientDescription: string, ....)
    {
    
    return forkjoin([1,2,4,4,5].map((documentId:number) => {
    
    this.http.get('uri'+documentId+'/'+clientId,headers..).pipe( catchError(error => {
                return of(error);
              });
    });

мой вопрос в том, как я могу узнать, какой вызов был успешным или неудачным на уровне компонента, или иметь возможность выводить все ошибки/ответ на уровень компонента

Спасибо


Ответы:


1

Ознакомьтесь с forkJoin здесь. Я думаю, для вас лучше передать объект с парами ключ-значение, чтобы вы могли лучше идентифицировать.

В вашем случае порядок будет одинаковым при подписке для каждого вызова (по сути, он все еще будет в [1, 2, 3, 4, 5]) при подписке.

Ваш catchError перехватывает ошибки для вызова API и возвращает успешный объект ошибки для того, кто subscribes.

Что-то вроде этого должно помочь вам начать:

this.service.getDocumentCall(1, 'hello').subscribe(responses => {
  responses.forEach(response => {
     // check if the response is instance of HttpErrorResponse signalling an error
     if (response instanceof HttpErrorResponse) {
        console.log('This call failed');
     } else {
        console.log('This call succeeded');
     }
  });
});

Редактировать:

Попробуйте что-то вроде этого:

private getDocumentCall(clientId: int, clientDescription: string, ....)
    {
      const calls = {};
      const ids = [1, 2, 3, 4, 5];
      
      // create the calls object
      ids.forEach(id => {
         calls[id] = this.http.get('uri' + id + '/' + clientId, headers...).pipe( catchError(error => {
                return of(error);
              });
      });
      return forkJoin(calls);
    });
this.getDocumentCall(1, '2').subscribe(response => {
  // loop through object
  for (const key in response) {
    if (response[key] instanceof HttpErrorResponse) {
      console.log(`Call with id: ${key} failed`);
    } else {
      console.log(`Call with id: ${key} succeeded`);
    }
  }
});
31.05.2021
  • где бы я тогда перебирал идентификаторы? 31.05.2021
  • Проверьте мое редактирование. 31.05.2021
  • Огромное спасибо. 31.05.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..