在继续之前等待另一个可观察的结果

2023-12-15

我不知道是否应该为此发布任何代码。但如果需要的话我会的。我有一个 Angular2 指令,MyDirective和一项服务MyService

该服务在其构造函数中进行 http 调用以获取某些内容并存储在其中this.list.

指令注入服务并将其用作myService.isPresent(item).

现在的问题是,当指令执行时,用于获取服务中列表的 http 调用尚未完成。有没有一种干净的方法让指令等待服务准备好?


不,由于 http 调用始终是异步的,因此您无法同步等待它们。

但是,您可以使用以下方法实例化该服务ReflectiveInjector您自己并在引导应用程序之前调用初始化以确保所有内容都已加载。

In the bootstrap致电只需提供您的MyService实例与数据。

//import ... from ...
import {MyService} from './my.service';

let injector = ReflectiveInjector.resolveAndCreate([HTTP_PROVIDERS, MyService]);
var myService: MyService = injector.get(MyService);

myService.init()
  .subscribe(data => {
    bootstrap(App, [
      HTTP_PROVIDERS,
      provide(MyService, {useValue: myService})
    ])
    .catch(err => console.error("error: ", err));
  });

In your MyService添加这个init方法返回一个Observable为了您的数据加载:

init(): Observable<any> {
  if (!this._initialized) {
    this._initialized = true;
    return this._http.get(this._url)
      .map(data => { 
        this._data = data.json();
        return this._data;
      });
  }
  else {
    console.log("Already initialized!");
  }
}

Plunker有一个工作示例

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在继续之前等待另一个可观察的结果 的相关文章

随机推荐

  • C# Linq Where 两个日期之间的日期

    我正在尝试让 linq 语句获取两个日期之间的所有记录 但我不太确定需要更改什么才能使其正常工作 a Start gt startDate endDate var appointmentNoShow from a in appointmen
  • Oracle Select * 返回行,但 Select count(1) 返回 0

    所以 这很奇怪 是我以前从未见过的 我希望有人能给出神奇的答案来阐明这个问题 SELECT FROM TABLE returns rows a lot of rows however SELECT COUNT 1 FROM TABLE re
  • 使用 Apache HttpClient 定义源 IP 地址

    我正在开发一个具有以下需求的项目 使用源ip地址A访问远程服务器XX YY ZZ WW上的http服务S 使用源ip地址B访问远程服务器XX YY ZZ WW上的http服务T 同上 XX YY ZZ WW 是我无法控制的主机 我的服务器在
  • WebCrypto API:DOMException:提供的数据太小

    我想在客户端解密消息 react js using Web Crypto API这是在后端加密的 node js 但是我遇到了一个奇怪的问题 并且不知道出了什么问题 我也检查了this node js function encrypt me
  • 使用 JQuery 将“删除链接”附加到克隆元素

    All 我需要在所有克隆部分的末尾添加一个 删除 链接 但不是克隆材料的来源 这就是我到目前为止所拥有的 需要这样的东西 步骤1 第二步 克隆的素材没有删除链接
  • 必需:双 [] 找到:无参数

    Code ArrayList
  • 指定 Automator 中运行哪个版本的 Python?

    在我的终端和 CodeRunner 中 我的 Python 已更新为 2 7 6 但是当我在 OSX Automator 中运行 shell 脚本时 我发现它正在运行 2 7 2 如何像其他编译器一样将 Automator Python 更
  • Sonarqube API 单类测试覆盖率

    我正在尝试通过 SonarQube API Sonar 版本 4 1 2 检索各个类的单元测试代码覆盖率 一切工作正常 当我直接进入声纳仪表板并进入某个类的覆盖选项卡时 我可以看到指标正常 93 9 by unit tests Line c
  • 使用 json-smart 读取 JSON 文件

    我正在尝试将 JSON 文件中的值读取到数组中以进行进一步处理 我正在使用 JSON Smart 1 2 0 库来实现同样的目的 由于一些限制 我无法使用2 0版本 我收到以下异常 java lang ClassCastException
  • 通过firestore安全规则引用Firebase实时数据库数据

    我想使用实时数据库中的数据来允许用户访问 firestore 数据库中 是否可以从 firestore 安全规则引用实时数据库中的节点 目前在安全规则中还无法实现这样的数据库产品之间的交叉 请随时归档功能对此提出要求 但是 您可以编写在 C
  • 我应该使用哪个框架在 Android 上运行 OData API? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在为 Android 手机创建一个程序 它将通过 Web 服务查询 检索然后处理来自 OData 提供商的 OData 请您告诉我哪个工具包最适
  • 丢弃来自套接字的输入

    From Socket文档 关机输入 public void shutdownInput throws IOException 将此套接字的输入流放置在 流末尾 发送到套接字输入流端的任何数据都会被确认 然后默默地丢弃 如果在套接字上调用
  • 如何在真实设备中查看我的应用程序的 sqlite 数据库的内容?

    我想在我部署它的设备中查看在我的应用程序中创建的数据库的内容 我可以在 shell 中使用 sqlite 命令并在模拟器中查看 但不能在真实设备中查看 有谁知道如何在真实设备中执行此操作吗 如果应用程序被标记为可调试 则不需要 root 您
  • Bootstrap 翻转卡与 css3 转换

    我想使用 CSS3 变换创建引导翻转卡 我确实是从这个开始的工作和基本示例 但是我想修改它以具有固定高度的卡和一些小的增强功能 特别是 当用户单击我在右上角创建的图标时 我需要翻转卡片 我已经修改了代码 如你所见here 问题是卡片在正确翻
  • Ruby 的 public_send 方法有什么等价的吗?

    在 Ruby 中 要构造方法的名称并将其发送到对象 可以执行以下操作 class Foo def foo FOO end end Foo new public send foo gt FOO Foo new public send foo
  • cpp (C++) 中的 sha1 函数

    首先我要说的是我对 C 一无所知 我用 google 搜索了一下 没有任何东西可以让我理解如何在 C 中使用 SHA1 不过找到了这个目标 C SHA1但它是关于目标 c 我不确定它是否相同 我需要执行以下操作 我有很多文件 我通过执行 m
  • 什么是 Scala 上下文和视图边界?

    简单来说 什么是上下文和视图边界 它们之间有什么区别 一些易于理解的示例也很棒 我认为这个问题已经被问过 但是 如果是这样 这个问题在 相关 栏中并不明显 所以 这里是 什么是视图绑定 A 视图绑定是 Scala 中引入的一种机制 可以使用
  • 我可以提取sql中重复的提取记录吗?

    在我的表中 我有以下列 id name gender 我想提取所有重复的名称 但我不想扫描所有数据库来一一统计每条记录 我只想知道谁有相同的名字 例子 0 mary F 1 tom M 2 peter M 3 mary F 4 chris
  • 使用 PredicateBuilder、LINQPad 和运算符 ANY 生成 SQL

    I 之前问过关于 Linq To Entities 中的链接条件的问题 现在我用LinqKit一切正常 我想查看生成的 SQL 并阅读后这个答案 I use LinqPad 这是我的声明 var predProduct PredicateB
  • 在继续之前等待另一个可观察的结果

    我不知道是否应该为此发布任何代码 但如果需要的话我会的 我有一个 Angular2 指令 MyDirective和一项服务MyService 该服务在其构造函数中进行 http 调用以获取某些内容并存储在其中this list 指令注入服务