rxjs — синхронный запрос forkJoin

#javascript #rxjs

#javascript #rxjs

Вопрос:

У меня есть несколько запросов для выполнения, и они вызываются в forkJoin() одновременно, также они указывают на одну и ту же конечную точку. Я хотел бы выполнить forkJoin синхронно, где только первый запрос будет вызовом API, который будет кэшировать возвращенные записи, а каждый следующий будет просто получать данные из кэша. Есть ли оператор, который может выполнять такие синхронные вызовы?

Ответ №1:

Публикация небольшого примера кода или, еще лучше, небольшого рабочего стека поможет нам помочь вам немного лучше.

Я не думаю, что понимаю, что вы подразумеваете под «синхронным» в этом контексте, поскольку любой вызов API будет асинхронным.

Но если вы хотите, чтобы что-то сохраняло кеш, проверьте shareReplay()

   // All product categories
  productCategories$ = this.http.get<ProductCategory[]>(this.productCategoriesUrl)
    .pipe(
      tap(data => console.log('categories', JSON.stringify(data))),
      shareReplay(1),
      catchError(this.handleError)
    );
 

Когда категории продуктов извлекаются в первый раз, он выдает http-запрос. В любое время после этого он возвращает кэшированные значения.

Комментарии:

1. Есть ли способ синхронно вызывать все запросы внутри forkJoin? Один за другим заканчивается?

2. Если вы хотите выполнить один http-запрос к конечной точке, дождитесь его завершения, а затем выполните другой http-запрос, который вы можете использовать concatMap. Для лучшего ответа был бы полезен пример кода, показывающий, чего вы пытаетесь достичь. 🙂