HTTP响应已翻转

时间:2017-10-23 17:41:59

标签: angular

我有一个有趣的问题,我似乎无法解决。我的应用程序使用HTTP调用各种端点,其中大多数都没有问题。特别是有一个让我头痛的问题,可能是最简单的一个。

我有一个服务,其中包含一个返回值如下所示的函数。

 return this._http.post(this.baseEndPoint + this.uri, postc, options)
        .map(res => res.json());

对我来说,这是非常标准的。奇怪的是,在任何错误响应/代码中,我的success / complete函数中的代码正在执行,并且在任何成功的响应中,我的错误函数中的代码正在执行。来自API的响应以404和204的形式返回,因此我希望它们会被相应地捕获。

this._service.function(param, param1)
  .subscribe(
    error => {
      console.log(error);
    },
    () => {
      console.log('lol wut');
    }
  );

这里没什么特别的。此外,我注意到我的请求正在进行两次网络呼叫,一次是由polyfill发起的,显示成功状态为200,但接着是另一次呼叫,状态为404,由“其他”触发。

所以,我的问题是 - 为什么这些被逆转了?我如何解决这个问题并允许他们被抓到适当的地方?为什么要拨打两个电话?

2 个答案:

答案 0 :(得分:1)

我不确定您为什么会看到两个网络请求,但根据您的参数名称,我认为您的回调是否已被撤消? subscribe的第一个参数可以是将在流上的next通知上执行的函数,第二个参数将在error通知上调用。第三个是完成通知。

this._service.function(param, param1).subscribe( onNext, onError, onComplete );

如果订单有问题,您还可以提供一个订阅对象来实现观察者界面,如下所示:

this._service.function(param, param1).subscribe({
  next: x => console.log( x ),
  error: x => console.error( x ),
  complete: () => console.info( 'done!' ),
});

答案 1 :(得分:1)

由于请求选项,您看到两个网络请求,因为请求的跨源性质,Angular会发出预检HTTP OPTIONS请求。 https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS。 此外,您的回调是以错误的顺序写的

this._service.function(param, param1)
        .subscribe(
            error => { // DONT CONFUSE with the name error, it can be any //name
                console.log(error);
            },
            () => {
                console.log('lol wut');
            }
        );

这里,第一个参数方法在成功时调用,第二个在出错时调用,第三个是我认为的信息。 实际的回调应该是

this._service.function(param, param1)
        .subscribe(
           data=>{
                    console.log("status code is ",data.status);},
            error => {
                console.log(error);
            },
            () => {
                console.log('lol wut');
            }

        );

或根据您的需要。