Вложенные вызовы Angular 6 Вложенный вызов никогда не выполняется - PullRequest
0 голосов
/ 03 ноября 2018

Работа в Angular 6 У меня есть два HTTP-вызова, которые должны выполняться последовательно. Первый вызов успешен, а второй вызов указывает на успешность, но фактически никогда не выполняет HTTP-запрос.

Если я прерву два вызова и выполню их по отдельности, они оба будут работать. Однако при объединении их в серию второй вызов никогда не работает.

Общая идея заключается в том, чтобы запросить подписанный URL-адрес с сервера и при получении загрузить файл по указанному URL-адресу.

export class StaticAssetService {
  constructor(private httpClient: HttpClient) { }

  public uploadAsset(assetType: StaticAssetType, file: File): Observable<any> {
    if (file) {
      return this.httpClient.get(`${environment.apiURI}/secure/file-upload/getPresignedURLForUpload.json`, {
        params: {
          assetType: assetType,
          originalFileName: file.name
        }
      }).pipe(map(response => {
        return this.httpClient.put(response.signedURL, file, {
          headers: new HttpHeaders({'Content-Type': file.type}),
          reportProgress: true
        })
      }));
    }
  }
}

1 Ответ

0 голосов
/ 03 ноября 2018

Вложение HTTP-вызовов с использованием синтаксиса, показанного выше, не рекомендуется. Скорее, есть определенные операторы RxJS (аналогично map), которые специально предназначены для последовательных HTTP-вызовов.

SwitchMap, рекомендованный комментатором, является одним из таких операторов. Вот пример:

Angular4 - Вложенные вызовы Http

Вот несколько статей, которые могут быть полезны:

https://medium.com/@juliapassynkova/switchmap-in-details-b98d34145311

https://blog.angular -university.io / rxjs-высшего порядка, отображение /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...