#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)))
)