如何保持RxJs干

dan*_*y74 1 rxjs ngrx angular

干(不要重复自己)

假设我在我的应用程序中使用了很多代码:

observable$.pipe(
  tap(value => console.log(value)),
  map(value => value * 5),
  ... more repeated stuff
)
Run Code Online (Sandbox Code Playgroud)

假设值5在代码的某些部分是不同的,但其他一切都是相同的.我可以以某种方式功能化/做一些事情,使其可重复使用,以避免复制粘贴问题?

我可以这样做吗?

observable$.pipe(
  getReusedOperators(7), // this would pipe to all above operators using 7 instead of 5
  tap((value) => console.log('im not reused and my value is', value)),
  ....
)
Run Code Online (Sandbox Code Playgroud)

这里最好的方法是什么?对不起,我的问题不是很好,但希望你能得到这个想法.

car*_*ant 6

使用可管理运算符要记住的事情是它们只是采用可观察并返回可观察对象的函数,因此您可以轻松地创建可重用的运算符组合,如下所示:

function getReusedOperators(factor) {
  return source => source.pipe(
    tap(value => console.log(value)),
    map(value => value * factor),
  );
}
Run Code Online (Sandbox Code Playgroud)

对于没有参数化可重用组合的情况,您可以使用静态pipe函数进行组合.有关示例,请参阅我的Combining Operators文章.

  • 答案是相似的。另一个答案是正确且相关的。它详细说明了 TypeScript 类型 - `OperatorFunction<T, R>` - 它表示一个函数,它接受一个 `Observable<T>` 参数并返回一个 `Observable<R>` 结果。并且该答案中的片段包装了一个内置运算符 - `map` - 而不是使用 `pipe` 组合多个运算符。您是否将返回 `OperatorFunction<T, R>` 的函数称为运算符,或者是否将 `OperatorFunction<T, R>` 本身称为运算符取决于您的观点。我对两者都使用术语“运算符”。 (2认同)
  • 我不确定你是什么意思。您当然可以返回 `source => source.pipe()`,因为该表达式是一个 `OperatorFunction`。哦,顺便说一句,我也有灰胡子。 (2认同)