Как сделать несколько асинхронных параллельных вызовов выборки в угловых и не ждать ответа - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь сделать параллельные запросы fetch / http.get, но я не могу сделать это асинхронно (около 400 http получает вызовы). Мой браузер зависает на время выполнения этих запросов. Поэтому я хочу сделать асинхронный вызов, чтобы не ждать завершения функции

Я пытался использовать async, но не смог сделать это async

async cacheNext(){
      console.log("Caching Images")
      this.cacheImages(imagearray)
      console.log("Cached Images")
    }
  }

async cacheImages(imagearray){
    imagearray.forEach(img => {
      fetch(img)
    });
  }


OR 

async cacheImages(imagearray){
    imagearray.forEach(img => {
      this.http.get(img).toPromise()
    });
  }

Я ожидаю, что функция cacheImages запускается, но cacheNext завершает

1 Ответ

1 голос
/ 09 июля 2019

Как прокомментировали другие, если вы делаете 400 http-вызовов, у вас, скорее всего, возникнут проблемы с дизайном / архитектурой.

Помимо этого, для выполнения нескольких параллельных http-вызовов и получения одного обратного вызова со всемирезультаты, я предлагаю использовать rxjs и forkJoin.

Если вы занимаетесь разработкой на Angular, вероятно, в ваших интересах изучить и освоить rxjs, так как большая часть фреймворка построена на нем.Преобразование всего в Promises просто кажется мне дополнительной, ненужной работой.

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

...