在 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,则不需要第二个 mapStackBlitz #2.