在 mergeMap 与 Redux Observable 之后无法传播值
Cannot propagate a value after mergeMap with Redux Observable
我在下面有非常基本的代码(完全可用),您也可以在这里找到它们:
https://stackblitz.com/edit/typescript-mergemap-deprecated?file=index.ts
import { merge, of } from "rxjs";
import { mergeMap, map, tap } from "rxjs/operators";
const loadQuestion = () =>
new Promise(resolve => resolve({
title: 'How are you?',
options: [ 'Excellent', 'Good', 'Bad' ],
}))
;
const action$ = of({
payload: {
eventName: 'AskQuestionEvent'
}
});
action$.pipe(
mergeMap(action => merge(
of(action).pipe(
tap(({ payload: eventName }) => {
console.log(eventName);
}),
map(({ payload: { eventName} }) => eventName),
mergeMap(() => loadQuestion(), (eventName, questionImport) => ({
eventName,
questionImport
})),
map(({ eventName, questionImport }) => ({
eventName,
question: questionImport
})),
tap(({ eventName, question }) => {
console.log(eventName);
console.log(question);
}),
),
)),
).subscribe();
它按预期工作,但我的问题是内部 mergeMap
似乎已被弃用。
我遇到错误:
@deprecated — resultSelector no longer supported, use inner map instead
如下图所示:
知道如何消除弃用警告吗?
如果可能的话,能否请您 fork 我上面的 StackBlitz
并应用您的方法?
提前致谢!
要消除弃用警告,您需要停止使用 resultSelector
参数。
你的代码 resultSelector
:
mergeMap(() => loadQuestion(), (eventName, questionImport) => ({
eventName,
questionImport
})),
更新后的代码没有:StackBlitz
mergeMap(eventName => from(loadQuestion()).pipe(
map(questionImport => ({eventName, questionImport}))
)),
P.S。 - 如果您只是将 questionImport
重命名为 question
,则不需要第二个 map
:StackBlitz #2.
我在下面有非常基本的代码(完全可用),您也可以在这里找到它们:
https://stackblitz.com/edit/typescript-mergemap-deprecated?file=index.ts
import { merge, of } from "rxjs";
import { mergeMap, map, tap } from "rxjs/operators";
const loadQuestion = () =>
new Promise(resolve => resolve({
title: 'How are you?',
options: [ 'Excellent', 'Good', 'Bad' ],
}))
;
const action$ = of({
payload: {
eventName: 'AskQuestionEvent'
}
});
action$.pipe(
mergeMap(action => merge(
of(action).pipe(
tap(({ payload: eventName }) => {
console.log(eventName);
}),
map(({ payload: { eventName} }) => eventName),
mergeMap(() => loadQuestion(), (eventName, questionImport) => ({
eventName,
questionImport
})),
map(({ eventName, questionImport }) => ({
eventName,
question: questionImport
})),
tap(({ eventName, question }) => {
console.log(eventName);
console.log(question);
}),
),
)),
).subscribe();
它按预期工作,但我的问题是内部 mergeMap
似乎已被弃用。
我遇到错误:
@deprecated — resultSelector no longer supported, use inner map instead
如下图所示:
知道如何消除弃用警告吗?
如果可能的话,能否请您 fork 我上面的 StackBlitz
并应用您的方法?
提前致谢!
要消除弃用警告,您需要停止使用 resultSelector
参数。
你的代码 resultSelector
:
mergeMap(() => loadQuestion(), (eventName, questionImport) => ({
eventName,
questionImport
})),
更新后的代码没有:StackBlitz
mergeMap(eventName => from(loadQuestion()).pipe(
map(questionImport => ({eventName, questionImport}))
)),
P.S。 - 如果您只是将 questionImport
重命名为 question
,则不需要第二个 map
:StackBlitz #2.