Redux Observable:如何在链的后半部分使用 action.payload?
Redux Observable: How to use action.payload in latter part of chain?
我已经 运行 进入这个问题好几次了,我想访问 action.payload
链的更下方。但到那时,传递给 mergeMap
的参数已经更改为其他内容。
鉴于我的操作是这样的:
{
type: BUY_GEMS,
payload: { value: 123, productIdentifier: "ABC123" }
}
还有这部史诗:
function purchaseGems(action$, store) {
return action$
.ofType(BUY_GEMS)
.mergeMap(action => {
const { productIdentifier } = action.payload; // <-------- works because it's the first mergeMap in this sequence
return Observable.fromPromise(
// Some promise call
).catch(error => Observable.of(buyGemsRejected(error)));
})
.mergeMap(action => {
const { value } = action.payload; // <----------- doesn't work because "action" is now just the response of the Promise above.
...
});
}
我该怎么做?
这个技巧就是将你的第二个 mergeMap
放在闭包中,其中可以执行操作。事实上,即使您不需要访问它,我通常也会在 redux-observable 中推荐这种模式,您可以将 Observable 链隔离在单个顶级合并策略运算符(mergeMap
、switchMap
、等),因为它使将来像这样的重构更容易,也更容易错误隔离(如果添加)。
function purchaseGems(action$, store) {
return action$
.ofType(BUY_GEMS)
.mergeMap(action => {
const { productIdentifier } = action.payload;
return Observable.fromPromise(somePromise)
.catch(error => Observable.of(buyGemsRejected(error)))
.mergeMap(response => {
const { value } = action.payload;
// ...
});
});
}
您的示例包含 Observable.fromPromise()
,我认为这只是伪代码,所以我跟进 Observable.fromPromise(somePromise)
以便其他读者更清楚。
我已经 运行 进入这个问题好几次了,我想访问 action.payload
链的更下方。但到那时,传递给 mergeMap
的参数已经更改为其他内容。
鉴于我的操作是这样的:
{
type: BUY_GEMS,
payload: { value: 123, productIdentifier: "ABC123" }
}
还有这部史诗:
function purchaseGems(action$, store) {
return action$
.ofType(BUY_GEMS)
.mergeMap(action => {
const { productIdentifier } = action.payload; // <-------- works because it's the first mergeMap in this sequence
return Observable.fromPromise(
// Some promise call
).catch(error => Observable.of(buyGemsRejected(error)));
})
.mergeMap(action => {
const { value } = action.payload; // <----------- doesn't work because "action" is now just the response of the Promise above.
...
});
}
我该怎么做?
这个技巧就是将你的第二个 mergeMap
放在闭包中,其中可以执行操作。事实上,即使您不需要访问它,我通常也会在 redux-observable 中推荐这种模式,您可以将 Observable 链隔离在单个顶级合并策略运算符(mergeMap
、switchMap
、等),因为它使将来像这样的重构更容易,也更容易错误隔离(如果添加)。
function purchaseGems(action$, store) {
return action$
.ofType(BUY_GEMS)
.mergeMap(action => {
const { productIdentifier } = action.payload;
return Observable.fromPromise(somePromise)
.catch(error => Observable.of(buyGemsRejected(error)))
.mergeMap(response => {
const { value } = action.payload;
// ...
});
});
}
您的示例包含 Observable.fromPromise()
,我认为这只是伪代码,所以我跟进 Observable.fromPromise(somePromise)
以便其他读者更清楚。