使用 mergMap 后无法访问以前的有效负载值
Cannot access to previous Payload value after a using mergMap
我有以下代码:
export const googleTagManagerInternalActionsEpic: Epic<RootAction, RootAction, RootState, Services> = (action$, state$) => {
return action$.pipe(
mergeMap(action => merge(
of(action).pipe(
filter(isActionOf(triggerGTMEvent)),
tap(({ payload: eventName }) => {
console.log(eventName);
}),
mergeMap(() => loadQuestion()),
map(questionImport => questionImport.default),
tap((question) => {
console.log(question);
debugger;
}),
ignoreElements(),
),
)),
);
}
我需要在第二个 console.log(...)
上访问与在第一个 console.log(...)
上相同的 eventName
值。我的问题是介于两者之间的 mergeMap
(这阻止了有效负载的传播)。我被迫使用 mergeMap
来从 loadQuestion()
电话中获取一些信息。
我是否可以同时获得这两个值?
谢谢!
您可以在 mergeMap 中使用第二个参数:
...
tap(({ payload: eventName }) => {
console.log(eventName);
}),
mergeMap(() => loadQuestion(), (eventName, questionImport) => ({
eventName,
questionImport
})),
map(({ eventName, questionImport }) => ({
eventName,
question: questionImport.default
})),
tap(({ eventName, question }) => {
console.log(eventName, question);
debugger;
}),
...
我有以下代码:
export const googleTagManagerInternalActionsEpic: Epic<RootAction, RootAction, RootState, Services> = (action$, state$) => {
return action$.pipe(
mergeMap(action => merge(
of(action).pipe(
filter(isActionOf(triggerGTMEvent)),
tap(({ payload: eventName }) => {
console.log(eventName);
}),
mergeMap(() => loadQuestion()),
map(questionImport => questionImport.default),
tap((question) => {
console.log(question);
debugger;
}),
ignoreElements(),
),
)),
);
}
我需要在第二个 console.log(...)
上访问与在第一个 console.log(...)
上相同的 eventName
值。我的问题是介于两者之间的 mergeMap
(这阻止了有效负载的传播)。我被迫使用 mergeMap
来从 loadQuestion()
电话中获取一些信息。
我是否可以同时获得这两个值?
谢谢!
您可以在 mergeMap 中使用第二个参数:
...
tap(({ payload: eventName }) => {
console.log(eventName);
}),
mergeMap(() => loadQuestion(), (eventName, questionImport) => ({
eventName,
questionImport
})),
map(({ eventName, questionImport }) => ({
eventName,
question: questionImport.default
})),
tap(({ eventName, question }) => {
console.log(eventName, question);
debugger;
}),
...