首页 > 解决方案 > 发送 forkjoin api,每个 api 之间有延迟

问题描述

我目前正在从事一个角度项目,我必须使用 forkjoin 在ngrx 效果中发送多个api。这有一个问题,我必须延迟发送多个 api,就好像我一次发送一样,它们被取消了。我的通话效果如下所示:

@Effect()
  timeslot$ = this.actions$
    .ofType(a.ItemActionTypes.GET_TIME_SLOTS)
    .map((action: a.GetTimeSlots) => action.payload)
    .switchMap(payload => {
      const serviceCol = payload.map(pl => this.service.getTimeSlots(pl));

       return Observable.forkJoin(serviceCol).pipe(
        mergeMap(result => {
          return [
            new a.GetTimeSlotsSuccess(
              ItemSearchAdaptor.allTimeSlotAdaptor(result)
            )];
        })
      ).catch((e: HttpErrorResponse) => {
        return Observable.of({});
      });
    });

谁能建议我可以用来在 API 发送之间延迟的任何方法。

标签: angularangular6ngrx-effectsfork-join

解决方案


getTimeSlots()方法应该延迟返回 observables,如下所示。延迟运算符可用于延迟请求。

请注意,如果提供给 forkJoin 的任何内部 observables 错误,如果您没有在内部 observable 上正确捕获错误,您将丢失任何将或已经完成的其他 observables 的值。如果您只关心所有内部 observables 是否成功完成,您可以在外部捕获错误。

getTimeSlots(pl){
            let observables = [];

            observables.push(http.doDelete(null, {})
                .pipe(delay(1000),
                    catchError(error => of(error))
            ))

            retur observables;
}

推荐阅读