代码之家  ›  专栏  ›  技术社区  ›  user3714598

有没有一种方法可以让同步函数订阅其中的可观察对象?

  •  -1
  • user3714598  · 技术社区  · 3 年前

    假设我有这个代码

    observableMethod():可观察{ 。。。 返回([1,2,3]); }

    notObservableMethod():整数{

    让myVal;

    if(isOM){ this.observableMethod().pipe( 第一() ).subscribe(val=> myVal=val; }); }其他{ myVal=this.nonAsyncMethod(); }

    返回myVal*5; }

    我能对notObservableMethod做些什么,以便它可以返回myVal*5;?这意味着它必须是一种同步的方法?

    编辑:事实上,val是一个url,我有一个用于该url的postProcess,在我导航到它之前,我在上面发布的例子中它更复杂。目前,我所做的是为postProcess创建另一个方法,然后在每个条件中调用它,或者在订阅中调用它(如果它是可观察的),但我在想是否有更好的方法可以做到这一点。谢谢!

    0 回复  |  直到 3 年前
        1
  •  0
  •   Antoine Viscardi Ziyed    3 年前

    由于我不完全确定我是否理解整个片段,我将尝试根据您的示例为您提供指导。我想知道是否有更好的方法,在订阅之前,使用一些RxJS运算符,或者 async$ 在模板中使用管道。

    我会把你上面的代码改成这样:

    observableMethod(): Observably { ... Return of([1, 2, 3]); }
    
    notObservableMethod(): Observable<number> {
    
      const observableSource = isOM ? this.observableMethod() : Observable.of(nonAsyncMethod());
    
      return observableSource.pipe(first(), map(val => val * 5)); 
    }