Rxjs:fromPromise和toPromise操作昂贵吗?

问题描述 投票:0回答:1

在我的TypeScript应用程序中,我已经有了一个内部可以执行多个fromPromisetoPromise操作的方法:

  myMethod(...): Promise<string> {
    return fromPromise(this.someService1.someMethod1(...)).pipe(
      mergeMap(param => fromPromise(this.someMethod2(...))),
      map(param => getSomethingFromParam(param)),
    ).toPromise();
  }

someMethod1someMethod2也在内部使用toPromisefromPromise

我知道,如果我这样说的话,看起来很乱。但是,原因是每个服务中都有一个干净的API(例如,我大都使用someMethod1someMethod2的结果作为承诺,因此我将其内部可观察值转换为Promise并像这样公开它)。

我当然可以重构整个东西,让我的服务公开更多的方法,例如,我可以调用直接向我返回Observable而不是Promise的方法。

我的问题是:我需要这样的重构吗?

换句话说:目前,我的服务的API非常干净,它们仅公开Promises。但是,每当我想从rxjs运算符中受益时,就必须使用fromPromisetoPromise。因此,我想保持目前的状态,除非这些操作(在性能方面)很昂贵。

typescript rxjs es6-promise rxjs6 rxjs-observables
1个回答
1
投票
首先,您的标记提到

rxjs6,因此fromPromise不再是Global API的一部分。使用from代替:fromPromise does not exist on type Observable

简短的回答,不,它并不昂贵。

您正在转换它,以便可以使用操作员的功能。

嗯,toPromise曾经是一个运算符,现在已直接合并到

Observable

类。如果我们看一下toPromise的实现:

toPromise(promiseCtor?: PromiseConstructorLike): Promise<T | undefined> { promiseCtor = getPromiseCtor(promiseCtor); return new promiseCtor((resolve, reject) => { let value: T | undefined; this.subscribe((x: T) => value = x, (err: any) => reject(err), () => resolve(value)); }) as Promise<T | undefined>; } }

我们可以看到toPromise订阅了Observable并获得了Promise。

您要做的就是像其他任何运算符一样链接,以便您可以内部订阅可观察对象(例如MergeMap将对10个不同的可观察对象进行订阅)。您的实现是合法的。

© www.soinside.com 2019 - 2024. All rights reserved.