Rxjs:fromPromise和toPromise操作昂贵吗?

在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并像这样公开它)。 / p>

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

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

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

lipton_12345678 回答:Rxjs:fromPromise和toPromise操作昂贵吗?

首先,您的标签提及 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个不同的可观察对象进行订阅)。您的实现是合法的。

本文链接:https://www.f2er.com/2656261.html

大家都在问