Angular不返回期望值

时间:2018-11-10 17:41:23

标签: javascript angular typescript http angular7

我对Angular(7)有点陌生。我正在尝试执行HTTP请求时检索状态代码。这是我在服务中使用的代码:

checkIfSymbolExists() {
     return this.http.get(this.url, { observe: 'response' })
      .subscribe(response => {
        return response.status;
      });
  }

我在这样的组件之一的方法中使用返回值:

onSubmit() {
    console.log(this.stocks.checkIfSymbolExists());
}

我期望返回一个数字,但是我有一个对象:

Subscriber {closed: false, _parent: null, _parents: null, _subscriptions: Array(1), syncErrorValue: null, …}
closed: true
destination: SafeSubscriber {closed: true, _parent: null, _parents: null, _subscriptions: null, syncErrorValue: null, …}
isStopped: true
syncErrorThrowable: true
syncErrorThrown: false
syncErrorValue: null
_parent: null
_parentSubscription: null
_parents: null
_subscriptions: null
__proto__: Subscription

当我不是在简单地返回response.status的情况下,而是在console.log中获取了预期的200状态代码(一个数字,而不是一个对象)。

有什么主意,为什么返回如下所示的response.status值时,行为会不同?谢谢。

1 个答案:

答案 0 :(得分:2)

您做错了方法。这是执行此操作的正确方法:

首先,您从http.get返回映射的响应,而不是从那里返回subscribe。因此,您需要使用.pipe(map(...))而不是subscribe

import { map } from 'rxjs/operators';
...
checkIfSymbolExists() {
  return this.http.get(this.url, { observe: 'response' })
    .pipe(
      map(res => (res.status === 200))
    );
}

然后从checkIfSymbolExists返回可观察对象,然后在subscribe方法中将onSubmit返回给它:

onSubmit() {
  this.stocks.checkIfSymbolExists()
    .subscribe(res => console.log(res));
  // This should print true if status is 200. false instead.
}

说明:

服务方法checkIfSymbolExists()的职责是为组件提供所需的东西。因此,基本上,您的组件不需要知道您的服务从何处确切地获取此数据。订阅boolean返回的Observable只需获得checkIfSymbolExists()

现在checkIfSymbolExists()方法将获得响应,并且您还为完整响应observe添加了一个选项。 map只是将转换响应的Rxjs运算符。在map内部,我们正在检查是否将获得res.status,这是因为我们已经通过执行observe

{ observe: 'response' } d次了

现在map将返回比较运算符===返回的任何内容,如果truestatus200,则比较运算符false将返回Import-Module WebAdministration $SiteName = "Act.Web.API" # IIS Site Name New-WebVirtualDirectory -Site $SiteName -Name APFW-api -PhysicalPath C:\inetpub\wwwroot New-WebApplication -Name Act.Web.API -Site $SiteName\APFW-api -PhysicalPath "C:\Program Files (x86)\ACT\APFW-api" -ApplicationPool $SiteAppPool 否则。

希望这可以使您更好地理解。