Javascript Q库的角度问题

Javascript Q库的角度问题,javascript,angularjs,Javascript,Angularjs,我正在学习pluralsight.com上与Angular.js相关的教程。到目前为止,我没有严重的问题。教程非常好,容易理解。然而,有些事情是我自己无法解决的。我希望我的同事在成功或失败时做出不同的反应。在这种情况下,他们总是像成功一样开火 服务: var resource = $resource('/data/event/:id', {id: '@id'}); return { getEvent: function (id) { var deferred = $q.d

我正在学习pluralsight.com上与Angular.js相关的教程。到目前为止,我没有严重的问题。教程非常好,容易理解。然而,有些事情是我自己无法解决的。我希望我的同事在成功或失败时做出不同的反应。在这种情况下,他们总是像成功一样开火

服务:

var resource = $resource('/data/event/:id', {id: '@id'});
return {
    getEvent: function (id) {
        var deferred = $q.defer();
        resource.get({id: id},
            function (event) {
                console.log("This is (EVENT): " + event);
                deferred.resolve(event);
            },
            function (response) {
                console.log("This is (RESPONSE): " + event);
                deferred.reject(response);
            });

        return deferred.promise;
控制器:

 $scope.event = eventData.getEvent(2)
         .then (
              function(event) {
                  $scope.event = event;

                  console.log(event);
              },
              function(response) {
                  console.log(response);
              }
          );

换句话说,如果我发送了错误的id(加载不存在的JSON文件),我希望它告诉我。

中的
$resource
服务将调用
$http
服务,将一些REST约定应用于http请求。这些都有文件记录

在处理来自
$resource
的承诺时,如果HTTP状态代码为200,则将执行成功回调。否则(如果HTTP状态代码在400或500范围内),将执行错误回调。这是一个典型的REST惯例

因此,由于您的服务总是返回200个状态代码,
$resource
假定这是一个成功的服务器调用,并执行成功回调

为了处理这个问题,您需要直接使用
$http
,或者更改您的服务,以便它返回正确的http状态代码


希望这有帮助。

您的“失败”返回的HTTP状态码是什么?你看到了哪个console.log(你没有看到哪个)?我唯一看到的是:console.log(“这是(事件):”+EVENT);那总是被解雇!好的,您的服务返回什么HTTP状态码?它不是200吗?总是200。据费德勒说,这是你的问题。当服务返回200以外的内容时,称REST接口出错。400或500范围内的某个值被视为错误。因此,
$resource
永远不会调用错误函数(除非状态代码不是200)。