我正在使用rxjs
,并希望使用fp-ts
包中的Reader
monad作为依赖注入解决方案。
下面是我的代码:
import { of } from 'rxjs';
import { pipe } from 'fp-ts/function';
import { mergeMap } from 'rxjs/operators';
import * as R from 'fp-ts-rxjs/ReaderObservable';
type Dependency = { dep1: string }
const fn1 = (input: string): R.ReaderObservable<Dependency, string> => (dep: Dependency) =>
of(`${input} | ${dep.dep1}`);
const fn2 = () => pipe(
of('initial').pipe(
mergeMap(x => pipe(
fn1(`| inside merge map ${x}`),
)),
),
);
fn2()({dep1: "something"}).subscribe(
data => console.log(data),
);
fn1
函数具有使用Reader
monad注入的依赖项
问题是,当我在mergeMap
中使用此函数时,返回值是ReaderObservable
而不是Observable
,这会导致错误。
如何在mergeMap
中使用ReaderObservable
发布于 2021-04-24 19:11:17
它不起作用,因为mergeMap
的回调必须返回Observable
或ObservableInput
type ObservableInput<T> = SubscribableOrPromise<T> | ArrayLike<T> | Iterable<T>;
但是ReaderObservable
是一个返回Observable
的function。
任何期望Observable | ObservableInput
的东西在没有实际调用依赖项的情况下都无法使用它。
那么如何使用它呢?那么,在什么情况下,您的依赖项实际上将被注入?您的代码示例没有显示实际的注入点。至少,依赖项必须在mergeMap
回调的作用域中,这样您才能将ReaderObservable
转换为实际的Observable
。
https://stackoverflow.com/questions/67246141
复制