链接 rxjs 6 observables

Chaining rxjs 6 observables

我必须创建一个包含 ajax 个请求的队列并对结果进行分组,但我不知道如何完成此操作。

假设我有一个这样的数组:

const actors = [
  "Al Pacino",
  "Robert De Niro"
];

我必须对其进行迭代,并针对每个值进行 api 调用:

export const getMovies = action$ =>
  action$.pipe(
    ofType(LOAD_REQUEST),
    // iterate over the array
    // make api call with the actor name
    // for each result, make a second api call with the id of the actor (get in the response.results.id)
    // group the result in an array with all films of all actors of the array passed in the payload
  );

我被 switchMap、pipe ... 困住了,不知道完成此操作的正确方法。

编辑尝试了您的解决方案 Valeriy,但出现此错误:

export const getMovies = action$ =>
  action$.pipe(
    ofType(LOAD_REQUEST),
    switchMap(({ payload }) =>
      combineLatest(
        payload.map(a => {
          return ajax
            .getJSON(actor(a))
            .pipe(map(response => console.log(response)));
        })
      )
    )
  );


TypeError: You provided 'function (source) {
    return source.lift.call(Object(_observable_from__WEBPACK_IMPORTED_MODULE_2__["from"])([source].concat(observables)), new _observable_combineLatest__WEBPACK_IMPORTED_MODULE_1__["CombineLatestOperator"](project));
  }' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.

如果我理解正确的话,你正在尝试实现这样的目标:

export const getMovies = action$ => action$.pipe(
    ofType(LOAD_REQUEST),
    switchMap(() => {
        // group the result in an array with all films of all actors of the array passed in the payload
        return combineLatest(
            // iterate over the array
            ...actors.map(actorName => {
                // make api call with the actor name
                return loadActor(actorName).pipe(
                    // for each result, make a second api call with the id of the actor (get in the response.results.id)
                    switchMap(response => loadActorFilms(response.results.id))
                );
            })
        );
    })
);

我已经使用 combineLatest 将多个可观察值组合在一起。