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

角度/RxJS:同步可观测

  •  1
  • chris01  · 技术社区  · 6 年前

    我有一个服务有一个方法foo。在这个方法中,我订阅了一个可观察的(http客户机)。

    foo () : boolean
    {
      let ret : false;
    
      this.http.get ("/blabla").subscribe (
      (resp) =>
      {
        ret = true;
      }
    
      return ret;
    );
    

    我喜欢从foo返回一个布尔值,它取决于get。这不起作用,因为http.get是asynchrouns-在http.get完成之前调用return。

    我怎样才能使它同步?

    返回可观察的而不是布尔值在这里不是一个选项。

    我用管子和水龙头扩展了我的样品。现在,我返回服务外部的http.get-observable,并使用tap处理http.get-result。

    foo () : Observable <any>
    {
      return this.http.get ("/blabla").pipe (tap (x => handlehere ()));
    }
    

    2 回复  |  直到 6 年前
        1
  •  20
  •   xrobert35    6 年前

    在您的服务中:foo方法:

    async foo() {
       const result = await this.http.get("/blabla").toPromise();
    
       // do what you want with result 
    
       return result;
    }
    

    this.myService.foo().then( (result) => {
       // Do what you want with the result
    });