Делать несколько запросов HTTP параллельно - PullRequest
0 голосов
/ 30 октября 2019

У меня есть функция, которая при вызове должна делать несколько HTTP-запросов параллельно. В приведенном ниже коде у меня есть массив элементов. Мне нужно вызвать метод patchElements для каждого элемента и вызвать updateData. Когда я запускаю это, выполняется только http-вызов в updateData, но если я что-то консолью записываю в patchElements, он печатается.

Я не уверен, что я делаю неправильно.

updateCriteria(id, values, elements) {
    return forkJoin(
      elements.map((el) => this.patchElements(rtId, values, el)),
      this.updateData(id, values)
    ).pipe(
      tap(() => {
        // do something
      }),
      catchError((err) => {
        // do something
    ).subscribe();
}

patchElements(id, values, elements) {
    return this.http.patch(*url*);
}

updateData(id, updates) {
    return this.http.put(*url*);
}

1 Ответ

0 голосов
/ 30 октября 2019

forkJoin() функция из rxjs может принимать только массив завершенных обещаний и наблюдаемых значений и одно из свойств, которые вы задаете как массив. Это должно работать:

updateCriteria(id, values, elements) {
    return forkJoin([
      ...elements.map((el) => this.patchElements(rtId, values, el)),
      this.updateData(id, values),
    ]).pipe(
      tap(() => {
        // do something
      }),
      catchError((err) => {
        // do something
    ).subscribe();
}

patchElements(id, values, elements) {
    return this.http.patch(*url*);
}

updateData(id, updates) {
    return this.http.put(*url*);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...