RxJS: Доступ к предыдущему значению далее по цепочке трубопроводов

#javascript #rxjs

Вопрос:

У меня есть приведенный ниже код

 updateProduct$ = createEffect(() =>
  this.actions$.pipe(
    ofType(UPDATE_PRODUCT),
    mergeMap(updateProduct => 
      this.productService.put(updateProduct.product, updateProduct.id).pipe(
        map((product) => PRODUCT_DETAILS_COMPONENT(product)), // want to access updateProduct here 
        catchError((error) => of(PRODUCT_ERROR(error)))
      )
    )
  )
);
 

В map((product) => PRODUCT_DETAILS_COMPONENT(product)) я хочу получить доступ к предыдущему значению updateProduct

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

1. ваше map находится во внутреннем наблюдаемом, вы уже должны иметь доступ к обновлениюпродукт нет?

2. Я могу подтвердить то, что сказал @FanCheung — я делаю это все время в своих эффектах.

3. @deaks Я не уверен в синтаксисе, как я могу получить доступ, не могли бы вы показать мне пример

4. В своей линии map((product) => PRODUCT_DETAILS_COMPONENT(product)) вы можете просто перейти updateProduct к своему действию.

5. У вас есть действие, которое вы хотите назвать. В данный момент вы передаете свой product объект. Вместо этого объекта передайте вместо updateProduct него объект.

Ответ №1:

Не уверен, правильно ли я вас понимаю, но на первый взгляд это выглядит в точности как вариант использования попарного оператора. Можно было бы использовать вот так:

  this.actions$.pipe(
    ofType(UPDATE_PRODUCT),
    pairwise(),
    mergeMap([previousUptProd, currentUptProd] => {
        ...
    }
 

Ответ №2:

Вы можете использовать updatedProduct в качестве параметра PRODUCT_DETAILS_COMPONENT в вашем внутреннем наблюдаемом

  this.productService.put(updateProduct.product, updateProduct.id).pipe(
        map((product) => PRODUCT_DETAILS_COMPONENT(updateProduct)), // want to access updateProduct here 
        catchError((error) => of(PRODUCT_ERROR(error)))
      )