0

我正在使用rxjs并希望使用包中的Readermonadfp-ts作为依赖注入解决方案。

这是我的代码:

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函数具有使用Readermonad注入的依赖项

问题是当我在 amergeMap中使用此函数时,返回值是 aReaderObservable而不是 anObservable并导致错误。

我怎样才能ReaderObservable在里面使用mergeMap

4

1 回答 1

0

它不起作用,因为mergeMap的回调必须返回 anObservable或 an ObservableInput

type ObservableInput<T> = SubscribableOrPromise<T> | ArrayLike<T> | Iterable<T>;

但是 aReaderObservable是一个返回a 的函数Observable

如果不使用依赖项实际调用它,任何期望的东西Observable | ObservableInput都无法使用它。


那么如何使用它呢?那么,您的依赖项实际上会在什么时候被注入?您的代码示例没有显示实际的注入点。至少,依赖项必须在回调范围内,以便mergeMap您可以将.ReaderObservableObservable

于 2021-04-24T19:11:17.030 回答