Angular $ http错误回调未执行

时间:2017-04-12 09:03:41

标签: angularjs angular-promise angular-http

我在我的角应用程序中嵌套了http调用。

$scope.saveAsPaused = function() {

                var cmsResponse = saveAtCMS();
                cmsResponse.then(function(data){

                        saveAtRe(data).then(function(data){

                                successSave(data);
                        }, function(data, isOffDel){

                                delOnFailRE(data);
                        });
                });
      }

var saveAtRe = function(data) {
            return $http.post('/pause', data);
        }

JAVA中的后端代码

    @POST
    @Produces("application/json")
    @Path("/pause")
    public Response createInPauseState(CampaignConfigurationBeans camp) {

         return Response.status(502).entity("false").build();

    }

saveAtRe 函数中,我从后端返回状态代码502,但我的应用程序仍在调用successSave函数。

有人可以解释我做错了吗?

2 个答案:

答案 0 :(得分:0)

来自Angular Docs

  

200到299之间的响应状态代码被视为成功   status并将导致成功回调被称为

502状态代码预计会触发错误回调,您的代码看起来不错。你能否在成功回调中仔细检查返回状态,例如

 saveAtRe(data).then(function(data){
                            console.log(data.status);
                    }, function(data, isOffDel){
                            delOnFailRE(data);
                    });

如果收到的状态是502,那么这不是一般行为,我会检查你的代码中是否应用了额外的Angular的http拦截器。

答案 1 :(得分:0)

这可能对您有所帮助

#include <iostream>
#include <fstream>
#include <sstream>
#include <regex>

#define USE ".*[0-9]{2}\\.[0-9]{2}\\.[0-9]{2}\\.[0-9]{2}\\.[0-9]{2}.*(?:\\n)*"

int                     main(int argc, char **argv)
{
  std::stringstream     stream;
  std::filebuf          *buffer;
  std::fstream          fs;
  std::string           str;
  std::regex            regex(USE);

  if (argc != 2)
    {
      std::cerr << "Think to the use !" << std::endl;
      return (-1);
    }
  fs.open(argv[1]);
  if (fs)
    {
      stream << (buffer = fs.rdbuf());
      str = stream.str();
      if (std::regex_match(str, regex))
        std::cout << "Yes" << std::endl;
      else
        std::cout << "No" << std::endl;
      fs.close();
    }
  return (0);
}