0

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

服务:

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

4

1 回答 1

0

Angular 中的$resource服务包装了对服务的调用,该$http服务将一些 REST 约定应用于 HTTP 请求。这些都记录在 $resource docs中。

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

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

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

希望这可以帮助。

于 2013-10-28T16:48:52.277 回答