0

私は、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);
              }
          );

つまり、(存在しない JSON ファイルをロードするために) 間違った ID を送信した場合、そのことを知らせてもらいたいのです。

4

1 に答える 1

0

$resourceangularのサービスは$http、いくつかの REST 規則を HTTP 要求に適用して、サービスへの呼び出しをラップします。これらはすべて、ここの $resource docs に記載されています。

からの promise を処理するときに$resource、HTTP ステータス コードが 200 の場合、成功のコールバックが実行されます。それ以外の場合 (HTTP ステータス コードが 400 または 500 の範囲にある場合)、エラー コールバックが実行されます。これは典型的な REST 規則です。

したがって、サービスは常に 200 のステータス コードを返すため、$resourceはこれがサーバー呼び出しの成功であると想定し、成功のコールバックを実行します。

これを処理するには$http、サービスを直接使用するか、サービスを変更して正しい HTTP ステータス コードを返す必要があります。

お役に立てれば。

于 2013-10-28T16:48:52.277 に答える