当前位置: 首页 > 知识库问答 >
问题:

角度/RxJS:同步可观测

端木震博
2023-03-14

我有一个服务,有一个方法foo。在该方法中,我订阅了一个可观察的(超文本传输协议-客户端)。

foo () : boolean
{
  let ret : false;

  this.http.get ("/blabla").subscribe (
  (resp) =>
  {
    ret = true;
  }

  return ret;
);

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

我怎样才能使这个同步?

编辑

返回可观察的布尔值在这里不是一个选项。这是因为我处理get in foo的响应(此处未显示),但我也需要根据它的返回来执行foo。

编辑2

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

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

就我看来,它只有一个丑陋之处。我有在foo内部和外部解析get结果的复杂性。我更喜欢foo之外的简单布尔值。

共有1个答案

相弘和
2023-03-14

此方法只能异步运行,因此您没有太多选项。返回可观察的,订阅或返回promise。也许回报一个promise会满足你在理解方面的更多需求。

为您服务: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
});
 类似资料:
  • 我有一个HTTP请求,希望将结果共享给多个组件。当然,HTTP请求返回一个可观察的。我希望多个组件能够订阅此服务,而不会触发额外的HTTP请求。 我在一个组件中使用实现了这一点,该组件按需发出HTTP请求,并有另一种方法订阅该主题。虽然这是可行的,但似乎有些过分,而且肯定有更好的方法。 主题服务 和一个订户 和第二个订户 从管道链中删除时,会发出多个网络请求。是否有一种更优雅/正确的方式将观察到的

  • 我有一个沙盒,它订阅了一个消息流,我想过滤该流,以查找已发送到或从特定用户使用另一个组件中指定的路由参数接收的消息。 messages.sandbox.ts: messages.detail.container.ts this.matching消息$似乎只包括this.received消息$但是我知道this.sent消息$不是空,因为我可以在我的模板中使用它没有问题。 我是不是遗漏了一些合并观测

  • 我试图创建一个可观察变量,当localStorage变量发生更改时返回值。我的订户在更改localStorage(或内存中的变量)时没有获得新值。 流动看起来像 步骤 1 - 导航栏订阅用户服务(获取默认值 loggedIn=false) 步骤 2 - 身份验证组件更新用户服务(设置 loggedIn = true) 我在导航栏中的订阅未更新。我在这里错过了什么。我是否需要像事件发射器一样在Use

  • 以下代码未订阅: 但是如果我这样做,它确实订阅: 更新:这个工作太 但当我添加逻辑时,它并没有 我遵循RxJS官方文档:https://rxjs-dev.firebaseapp.com/api/operators/find 我甚至必须在,当我执行时,什么也不会打印出来。我也尝试过使用管道。 对象: 我传递的昵称是将对象与“Devpato”进行比较

  • 嗨,我正在使用angular 7和rxjs async 在我的组件中,我使用ngFor与异步观察者 在我的服务中,我有一个BehaviorSubject,当用户选择一个组时,它会被释放 这是selectedItems$可观察的: 这是可行的,但现在我需要能够更改特定项以响应websocket消息。我有一个websocket连接,用于处理更新项目的消息。有没有一种方法可以使用rxjs的反应式方法来实

  • 我对angular是个新手,开始学习angular 4。数据未与使用异步管道的组件上的指令绑定。请帮忙 用户服务使用HTTP请求从API获取数据: user.service.ts 在这里,我使用用户列表的可观察用户[]界面: user.component.ts 订阅可观察用户变量的异步管道模板: user.component.html