В Angular 7 почему HttpClient.post выполняется дважды, даже если подписан только один раз? - PullRequest
0 голосов
/ 31 мая 2019

Только после того, как я подписался на эту заметку из HttpClient.post. Тем не менее, пост-запрос выполняется дважды, и, следовательно, добавляется одна и та же запись дважды. Обратите внимание, что все операторы журнала отладки показывают, что только успешный ответ от функции подписки печатается (и выполняется) дважды.

  addTemplate(template) {
      console.log('In addTemplate');
      let authHeaders = new HttpHeaders();
      authHeaders = authHeaders.set('Authorization', 'Bearer ' + localStorage.getItem('id_token'));
      authHeaders = authHeaders.set('Content-Type', 'application/json');
      const httpOptions = {
        headers: authHeaders,
        observe: 'body' as 'body',
        responseType: 'json' as 'json'
      };
      console.log('^^^^^ addTemplate  Service Header  = ', httpOptions);

      this.httpClient.post<any>(this.constants.URL + 'addTemplate', JSON.stringify(template),
        {headers: authHeaders}).pipe().subscribe(
        (response) => {  console.log ('Added Template Successfully -->', response)},
        (error) => { console.error('Got an Error while adding Template ->', error) }
      );
   }

Выше функция вызывается отсюда:

 saveTemplate(){
      const saveTemplate : ITemplate = Object.assign({}, this.templateForm.value);
      console.log('Adding new Template with name -->', saveTemplate.name);
      this.templateService.addTemplate(saveTemplate);
  }    

Вот изображение консоли браузера:

enter image description here

Вот изображение вкладки Сеть браузера:

enter image description here

Как видите, вызов HttpClient.post к API REST addTemplate вызывается дважды. Даже если почтовый звонок подписывается только один раз, и нет другого места, откуда он вызывается. Журнал звонков

  console.log('^^^^^ addTemplate  Service Header  = ', httpOptions);

в addTemplate функция в сервисе выполняется один раз, но log (response) => {console.log ('успешно добавлен шаблон ->', response)}, выполняется дважды.

Я попытался изменить вызов httpClient.post, чтобы использовать share () и publishLast (). RefCount (), но ничего не получалось. Может быть, я не сделал это правильно.

Использование Angular 7.2 с rxjs 6.5.2 и rxjs / compat (да, у меня есть какой-то устаревший код, который необходимо обновить до последней версии)

1 Ответ

0 голосов
/ 01 июня 2019

Это была моя ошибка.Форма вызывала saveTemplate (), а также кнопку ... Так что она вызывалась дважды.

<form [formGroup]="templateForm" autocomplete="off" novalidate (ngSubmit)="saveTemplate()">

Кнопка:

          <button mat-button mat-raised-button color="primary"
              type="submit" (click)="saveTemplate()" [disabled]="templateForm.pristine">Save

Спасибо @CaptainFindus, @Alexander Staroselsky и всемза вашу помощь

...