如何使用map运算符作为mergeMap?

Kev*_*eal 3 javascript observable rxjs

现在mergeMap已弃用,并且源中包含此注释:

/* @deprecated resultSelector no longer supported, use inner map instead */
Run Code Online (Sandbox Code Playgroud)

我如何使用"内部地图"代替?我想这意味着使用map内部的运算符函数.pipe,但是observable并不像它一样扁平化mergeMap.

obs1$.pipe(map(() => obs2$)).subscribe(r => console.log(r === obs2$))
// > true
Run Code Online (Sandbox Code Playgroud)

那么,mergeMap没有它的相当于怎么办?

Ngo*_*yen 6

你仍然使用mergeMap,它只是不推荐使用的resultSelector函数.

这个不被弃用:

export function mergeMap<T, R>(project: (value: T, index: number) => ObservableInput<R>, concurrent?: number): OperatorFunction<T, R>;
Run Code Online (Sandbox Code Playgroud)

但是,这些是:

/** @deprecated resultSelector no longer supported, use inner map instead */
export function mergeMap<T, R>(project: (value: T, index: number) => ObservableInput<R>, resultSelector: undefined, concurrent?: number): OperatorFunction<T, R>;
/** @deprecated resultSelector no longer supported, use inner map instead */
export function mergeMap<T, I, R>(project: (value: T, index: number) => ObservableInput<I>, resultSelector: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R, concurrent?: number): OperatorFunction<T, R>;
Run Code Online (Sandbox Code Playgroud)

  • 结果选择器折旧的解决方法在迁移指南中:https://github.com/ReactiveX/rxjs/blob/master/docs_app/content/guide/v6/migration.md#howto-result-selector-移民 (5认同)
  • 如果有人正在寻找@cartant发布的迁移文档,它已被删除,可以在这里找到:https://github.com/ReactiveX/rxjs/commit/661a9a3cbc184fec0ca93178a2713b1044142b1f#diff-2059af00cf2f5c11dc2744fcf996a7348169fabf1c7cfc00 668db56482932611 (3认同)
  • @Andresch这个链接应该很好,不应该中断:https://github.com/ReactiveX/rxjs/blob/1e1e022ed9fdc4a4bfed63cf151887031ac57398/docs_app/content/guide/v6/migration.md (2认同)