首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具

订阅角2
EN

Stack Overflow用户
提问于 2018-01-08 08:27:15
回答 3查看 65关注 0票数 1

我有一个文件,我用REST服务编码我的整个连接,而且它可以工作。

在另一个文件中,我正在执行以下行(everything works)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 this.baseService.getCars(ID)
    .subscribe(cars=> this.cars= cars);

为了访问响应的值,我使用了HTML。例如:*ngIf="cars"

现在,我想通过Javascript访问执行以下操作的变量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.baseService.getCars(ID)
        .subscribe(cars=> this.cars= cars);
console.log(this.cars) 

但我得到了undefined,但我可以通过HTML访问。我知道这是个问题,但我该怎么做呢?哪个变量包含变量?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-08 08:33:03

这些代码行的执行顺序不是您所认为的那样。

若要查看控制台中的汽车,请将功能更改为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.baseService.getCars(ID)
        .subscribe(cars=>{ 
    this.cars= cars;
    console.log(this.cars);
});
票数 3
EN

Stack Overflow用户

发布于 2018-01-08 08:38:27

您需要将console.log放在订阅

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  this.baseService.getCars(ID)
  .subscribe(
    cars=> {
      this.cars= cars;
      console.log(this.cars);
    },
    error => {
      console.log(error);
    }
  );
票数 1
EN

Stack Overflow用户

发布于 2018-01-08 08:50:17

订阅是异步的,就像承诺一样,但不是承诺,因此,当您执行代码时,会触发订阅,然后是控制台日志。但是当console.log执行时,订阅还在运行,所以这就是为什么您没有定义。

您可以在订阅中的回调函数中执行console.log。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.baseService
    .getCars(ID)
    .subscribe(cars=> {
        this.cars = cars
        console.log(this.cars)
    });

另一种解决方案是使用异步/等待。您不能直接与订阅一起使用异步/等待,因为这不是一个承诺。幸运的是,观察者可以转换成承诺。

因此,在您的服务中,您可以返回一个承诺,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
getCars() {
    // your service stuff
    return this.api.get(url).toPromise().then( res => res.data); // This is the important part.
}

然后,在您的组件中,使用异步/等待调用它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
async yourFunction() {
    this.cars = await this.baseService.getCars(ID);
    console.log(this.cars);
}

现在您可以在this.cars之后记录getCars()

希望这能帮到你。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48154259

复制
相关文章
python PIL模块
http://onlypython.group.iteye.com/group/wiki/1372-python-graphics-p_w_picpath-processing-library-introduced-the-p_w_picpath-module
py3study
2020/01/07
8370
我所理解的性能测试是什么?
扯淡 首先说明这篇博客是文不对题的。起这个名字想法来源自韩寒的《我所理解的生活》,之前看过一个关于这本书的视频,感觉巨牛X,于是就想写一篇《我所理解的性能测试》。虽然是文不对题的,但我就是想用这个名字,在这个残忍的社会,给自己博客文章起个名字这点权利还是有的。 下面我要贴出来的是zee大神的《性能测试面试问题列表》中列出来的性能测试与操作系统方面问题与我自己整理的回答。回答的不一定对,也懒得去改了。就用这些问题与回答来记录我这段时间的努力,来记录我所理解的性能测试吧。 性能测试 1.如何理解TPS 性能指
小小科
2018/05/02
1.3K0
为什么我的HibernateDaoSupport没有注入SessionFactory
1.按理来说Spring应该会通过setSessionFactory方法将SessionFactory注入进来,可是并没有。
用户2032165
2019/04/09
3.1K0
为什么我的HibernateDaoSupport没有注入SessionFactory
你所不知道的 equals()
在基本运算符中, == 扮演一个重要的角色, 而跟它相似的还有个 equals()方法, 这两个的区别是什么你知道么。
PhoenixZheng
2018/08/07
3030
你所不知道的JSON
JSON已经逐渐替代XML被全世界的开发者广泛使用。本文深入讲解JavaScript中使用JSON.stringify的一些细节问题。首先简单回顾一下JSON和JavaScript:
Jean
2018/10/09
1.1K0
你所不知道的JSON
python-PIL模块画图
python中执行mysql遇到like 怎么办 ? ​ ​sql = "SELECT * FROM T_ARTICLE WHERE title LIKE '%%%%%s%%%%'" % searchStr
py3study
2020/01/09
1.1K0
你所不知道的setTimeout
JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成。它们向任务队列添加定时任务。初始接触它的人都觉得好简单,实时上真的如此么?这里记载下,一路对其使用姿势变迁的历程。 1, setTimeout()基础 setTimeout函数用来指定某个函数或某段代码,在多少毫秒之后执行。它返回一个整数,表示定时器的编号,以后可以用来取消这个定时器。 var timerId = setTimeout(func|code, de
晚晴幽草轩轩主
2018/03/27
1.8K0
你所不知道的 Transformer!
可以看出,在计算X2加进去吐出来的值的时候必须要先把X1得出的参数值与X2放在一起才行。换句话说,RNN的计算是必须一个接一个,并不存在并行运算。如果不能并行运算,那么时间和计算成本均会增加。
红色石头
2022/01/20
5140
你所不知道的 Transformer!
尝试造了个工具类库,名为 Diana
项目地址: diana 文档地址: http://muyunyun.cn/diana/ 造轮子的意义 为啥已经有如此多的前端工具类库还要自己造轮子呢?个人认为有以下几个观点吧: 定制性强,能根据自己的需求为主导延伸开发。万一一不小心还能帮到别人(比如 React 库); 纸上得来终觉浅,很多流行的库,只是照着它们的 API 进行使用,其实这些库里蕴含着大量的知识、技巧,最好的办法就是仿照它们来写些小 demo,从而体会这些库的精髓; 造轮子的过程中能让自己体会到与平常业务开发不一样的乐趣;比如和日常业务
牧云云
2018/05/02
9410
我所理解的前端
入坑前端到今天也将近两年半了,这两天突然想到了第一次面试时面试官的一个问题-------你怎样理解前端的工作? 对于当时我一个小白而言完全是胡说一通,词不达意,搞得面试官一脸懵逼,现在想想那可能就叫尬
李文杨
2018/03/14
8550
你所不知道的 qPCR应用
荧光定量PCR技术于1996年由美国Applied Biosystems公司推出,由于该技术不仅实现了PCR从定性到定量的飞跃,而且与常规PCR相比,它具有特异性更强、有效解决PCR污染问题、自动化程度高等特点,目前已得到广泛应用。荧光定量PCR技术是通过荧光染料或荧光标记的特异性探针,对PCR产物进行标记跟踪,实时监控反应过程。随着PCR 反应的进行,反应产物不断累积,荧光信号强度也等比例增加。每经过一个循环,收集一次荧光强度信号,这样就可以通过荧光强度变化监测产物量的变化,结合相应的软件对产物进行分析,可以得到荧光扩增曲线,计算待测样品初始模版的量。实时荧光定量PCR技术是一次由定性技术向定量技术的飞跃,运用该项技术,可以对DNA、RNA样品进行相对定量、绝对定量和定性分析。
用户7625144
2020/08/10
1.2K0
你所不知道的 qPCR应用
你所不知道的NTLM Relay
NTLM Relay其实严格意义上并不能叫NTLM Relay,而是应该叫 Net-NTLM Relay。它是发生在NTLM认证的第三步,在 Type3 Response消息中存在Net-NTLM Hash,当攻击者获得了Net-NTLM Hash后,可以进行中间人攻击,重放Net-NTLM Hash,这种攻击手法也就是大家所说的NTLM Relay(NTLM 中继)攻击。
谢公子
2022/01/20
2.4K0
你所不知道的NTLM Relay
告诉你所不知道的typedef
来源一:Using typedef to Curb Miscreant CodeTypedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法。不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用 typedef 避免缺欠,从而使代码更健壮。typedef 声明,简称 typedef,为现有类型创建一个新的名字。比如人们常常使用 typedef 来编写更美观和可读的代码。所谓美观,意指 typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性
ccf19881030
2019/04/23
9380
㊙️ 你所不知道的webpack秘密!
Webpack 是当下最热门前端资源模块化管理和打包工具。任何形式的资源都可以视作模块,通
胡哥有话说
2019/07/25
10.2K0
㊙️ 你所不知道的webpack秘密!
你所不知道的「删除」操作。
在 Python 中,有删除作用的一般是 del、remove 和 pop,相信很多人都用过,但是不是真的会有待商榷,下面我们先来看一个例子:
编程文青李狗蛋
2019/11/07
3280
你所不知道的printf函数
printf是接受变长参数的函数,传入printf中的参数个数可以不定。而我们在变长参数探究中说到: 调用者会对每个参数执行“默认实际参数提升",提升规则如下: ——float将提升到double ——char、short和相应的signed、unsigned类型将提升到int
用户4645519
2020/09/08
4900
你所不知道的printf函数
《你不知道的JavaScript》:js中为什么没有类?
类--是一种代码的组织结构形式,是一种在软件中对真实世界中问题领域的建模方法。类有三个核心概念:封装、继承和多态。
前端_AWhile
2019/08/29
1.7K0
Integer 中你所不知道的
前几天和我六哥讨论技术的时候说到了 Integer,大家可能觉得 Intger 有什么好说的,不就是 int 吗,Java 装箱拆箱机制。那么现在有这样一个问题:
haifeiWu
2020/02/10
5520
你所不知道到的NVMe
NVMe SSD具有高性能、低时延等优点,是目前存储行业的研究热点之一,但在光鲜的性能下也同样存在一些没有广为人知的问题,而这些问题其实对于一个生产系统而言至关重要,例如:
Linux阅码场
2019/06/04
2.9K0
你所不知道到的NVMe
你所不知道的「删除」操作
在 Python 中,有删除作用的一般是 del、remove 和 pop,相信很多人都用过,但是不是真的会有待商榷,下面我们先来看一个例子:
PM小王
2019/07/02
3700

相似问题

"ModuleNotFoundError:没有名为'PIL‘的模块

13

我收到错误: ModuleNotFoundError:没有名为'PIL‘的模块

11

无法导入PIL ModuleNotFoundError:没有名为“PIL”的模块

10

ModuleNotFoundError:没有名为“PIL”错误的模块

13

ModuleNotFoundError:没有名为'PIL‘的模块,ImageTk

33
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文