使用 Redux Observable 合并映射后无法传播值
Posted
技术标签:
【中文标题】使用 Redux Observable 合并映射后无法传播值【英文标题】:Cannot propagate a value after mergeMap with Redux Observable 【发布时间】:2021-06-08 22:37:08 【问题描述】:我有下面非常基本的代码(完全实用),你也可以在这里找到:
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
并应用你的方法吗?
提前谢谢你!
【问题讨论】:
【参考方案1】:要摆脱弃用警告,您需要停止使用resultSelector
参数。
你的代码resultSelector
:
mergeMap(() => loadQuestion(), (eventName, questionImport) => (
eventName,
questionImport
)),
更新的代码没有:StackBlitz
mergeMap(eventName => from(loadQuestion()).pipe(
map(questionImport => (eventName, questionImport))
)),
附: - 如果您只是将 questionImport
重命名为 question
,则不需要您的第二个 map
:StackBlitz #2。
【讨论】:
以上是关于使用 Redux Observable 合并映射后无法传播值的主要内容,如果未能解决你的问题,请参考以下文章
React redux-observable:以史诗般的方式进行顺序 API 调用
下一个使用 cookie 的 js redux-observable 持久认证令牌
如何使用 rxjs 和 redux observable 实现 Promise 类型的场景?
为啥使用 Redux-Observable 而不是 Redux-Saga?