Только после того, как я подписался на эту заметку из 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);
}
Вот изображение консоли браузера:
Вот изображение вкладки Сеть браузера:
Как видите, вызов 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 (да, у меня есть какой-то устаревший код, который необходимо обновить до последней версии)