rxjs, forkJoin (массив) .mergeMap (...), внутренний mergeMap никогда не вызывается - PullRequest
0 голосов
/ 09 мая 2018

В моем случае сначала может выполняться несколько запросов параллельно, после того как эти запросы завершены, другой запрос будет отправлен с предыдущим результатом, псевдокод будет выглядеть как

let uploads$ = [obs1$, obs2$, obs3$];
Observable.forkJoin(uploads$).mergeMap(
  res => {
    // never get called if uploads$ = []
    let data = someCalculation(res);
    return this.http.post('http://endpoint/api/resource', data);
  }
).subscribe(
  res => {
  }
);

Если uploads$ = [], внутренний mergeMap никогда не вызывался.

Может кто-нибудь помочь? Я на RxJS 5.4

1 Ответ

0 голосов
/ 10 мая 2018

Это не называется b / c, излучение на наблюдаемом источнике отсутствует. Чтобы создать его, если наблюдаемые пустые, вы можете использовать операторы defaultIfEmpty или toArray.

const observables = [];
Rx.Observable.forkJoin(observables)
  .defaultIfEmpty([]) // or .toArray()
  .mergeMap(results => Rx.Observable.of(results.length))
  .subscribe(console.log);
...