Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度不';t返回期望值_Javascript_Angular_Typescript_Http_Angular7 - Fatal编程技术网

Javascript 角度不';t返回期望值

Javascript 角度不';t返回期望值,javascript,angular,typescript,http,angular7,Javascript,Angular,Typescript,Http,Angular7,我对角度有点陌生。我试图在执行HTTP请求时检索状态代码。以下是我在服务中使用的代码: checkIfSymbolExists() { return this.http.get(this.url, { observe: 'response' }) .subscribe(response => { return response.status; }); } 我在一个组件的方法中使用返回值,如下所示: onSubmit() { c

我对角度有点陌生。我试图在执行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
当我对它执行console.log操作时,我没有简单地返回
response.status
,而是得到了预期的200个状态代码(一个数字,而不是一个对象)


你知道为什么返回
response.status
的值时行为不同吗?谢谢。

你做得不对。以下是正确的方法:

首先,您从
http返回一个映射响应。get
而不是
subscribe
ing。因此,您需要使用
.pipe(map(…)
而不是
订阅

import { map } from 'rxjs/operators';
...
checkIfSymbolExists() {
  return this.http.get(this.url, { observe: 'response' })
    .pipe(
      map(res => (res.status === 200))
    );
}
然后从
checkIfSymbolExists
返回可观测值,然后通过
onSubmit
方法
subscribe

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

您的服务方法checkIfSymbolExists()的职责是为组件提供它想要的东西。因此,基本上您的组件不需要知道您的服务从何处获取这些数据。订阅由
checkIfSymbolExists()

现在,
checkIfSymbolExists()
方法得到响应,您还添加了一个选项来观察完整的响应
map
只是一个Rxjs操作符,它将转换响应。在
map
中,我们正在做的是检查
res.status
,我们将得到它,因为我们有
通过执行
{observe:'response}
d来观察响应

现在
map
将返回比较运算符
==
返回的任何内容,如果
状态为
200
则返回
true
,否则返回
false


希望这能让你更好地理解。

你做得不对。以下是正确的方法:

首先,您从
http返回一个映射响应。get
而不是
subscribe
ing。因此,您需要使用
.pipe(map(…)
而不是
订阅

import { map } from 'rxjs/operators';
...
checkIfSymbolExists() {
  return this.http.get(this.url, { observe: 'response' })
    .pipe(
      map(res => (res.status === 200))
    );
}
然后从
checkIfSymbolExists
返回可观测值,然后通过
onSubmit
方法
subscribe

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

您的服务方法checkIfSymbolExists()
的职责是为组件提供它想要的东西。因此,基本上您的组件不需要知道您的服务从何处获取这些数据。订阅由
checkIfSymbolExists()

现在,
checkIfSymbolExists()
方法得到响应,您还添加了一个选项来观察完整的响应
map
只是一个Rxjs操作符,它将转换响应。在
map
中,我们正在做的是检查
res.status
,我们将得到它,因为我们有
通过执行
{observe:'response}
d来观察响应

现在
map
将返回比较运算符
==
返回的任何内容,如果
状态为
200
则返回
true
,否则返回
false


希望这能让您更好地理解。

您的后端API代码是什么?您的后端API代码是什么?谢谢您的回答。如果我想检查服务方法内部的状态代码呢?像这样:response=>{if(response.status==200){return true;}否则{return false;}}(edit:sorry for the indentation)您的速度非常快。成功了!非常感谢你!我不确定所有这些方法都做了什么,但我可以看到我还有很多东西要学^^^@tomfl,我已经添加了解释。希望这能帮助你了解一些正在发生的事情。非常感谢。如果我错了,请告诉我,但是我们订阅组件(而不是服务)中的响应(?)的原因是因为响应是异步的,这意味着执行其余的代码,然后才发送响应(从服务器加载后),对吗?是的。你可以这么说。无论您在
subscribe
块中写什么,只有在收到响应后才会调用
map
服务。谢谢您的回答。如果我想检查服务方法内部的状态代码呢?像这样:response=>{if(response.status==200){return true;}否则{return false;}}(edit:sorry for the indentation)您的速度非常快。成功了!非常感谢你!我不确定所有这些方法都做了什么,但我可以看到我还有很多东西要学^^^@tomfl,我已经添加了解释。希望这能帮助你了解一些正在发生的事情。非常感谢。如果我错了,请告诉我,但是我们订阅组件(而不是服务)中的响应(?)的原因是因为响应是异步的,这意味着执行其余的代码,然后才发送响应(从服务器加载后),对吗?是的。你可以这么说。无论您在
subscribe
块中写什么,只有在收到响应后,服务才会调用
map
ped。