Q库的角度问题

时间:2013-10-28 15:31:22

标签: javascript angularjs

我正在关注与pluralsight.com上的Angular.js相关的教程。到目前为止,我没有遇到过严重的问题。教程非常好,易于理解。但是,有些东西我不能自己解决。我希望我的deffered在成功或失败时做出不同的反应。在这种情况下,他们总是像他们成功一样开火。

服务:

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文件),我希望它让我知道。

1 个答案:

答案 0 :(得分:0)

angular中的$resource服务包含对$http服务的调用,该服务将一些REST约定应用于HTTP请求。这些都记录在案here in the $resource docs

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

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

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

希望这有帮助。