我对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
值时,行为会不同?谢谢。
答案 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
将返回比较运算符===
返回的任何内容,如果true
为status
和200
,则比较运算符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
否则。
希望这可以使您更好地理解。