Угловая http-публикация и ожидание нескольких результатов

#angular #typescript #rxjs #angular11

#угловая #typescript #rxjs #angular11

Вопрос:

Я использую Angular 11, и мне нужно выполнить http-вызов API, который выполнит процесс.

Итак, если я выполню этот вызов:

 processData(data) {
    return this.httpClient.post('https://myurl/api/process', {
      data: data
    }, 
    { 
      headers: this.headers() 
    });
}
 

API запустит процесс на стороне сервера и выполнит его.

Поскольку это займет время, мне нужно, чтобы Angular прослушивал и получал разные ответы, например, я мог бы заставить сервер отправлять процент прогресса.

Тогда Angular будет знать, сколько времени осталось, и сообщит пользователю, и, надеюсь, не просто тайм-аут ожидания результата.

Можно ли это сделать в Angular, если да, то как?

Комментарии:

1. Это может помочь вам @tomazbyden2000 Ссылка: angular.io/guide/http#report-progress

Ответ №1:

Вам нужно использовать reportProgress: true , чтобы показать некоторый прогресс любого HTTP-запроса. Если вы хотите видеть все события, включая ход передачи, вам также необходимо использовать observe: 'events' option и возвращать наблюдаемый тип HttpEvent . Затем вы можете перехватить все события (DownloadProgress, Response .. etc) в компонентном методе. Более подробную информацию можно найти в https://angular.io/guide/http#listening-to-progress-events

Ответ №2:

Метод post возвращает наблюдаемое значение, которое может даже запускаться несколько раз. Просто используйте свой метод следующим образом:

 processData(data).subscribe((res) => {
   console.log('The server has responded with :', res);
});

console.log('While I wait for the server to respond, I keep doing more stuff');
doMoreStuff();