3

工場コード

app.factory('abcFactory', function ($http, Config, $log) {
    var serviceURL = Config.baseURL + '/results';
    return{
        results:function() {
            var promise = $http({
                method: 'GET',
                url: serviceURL,
                timeout: Config.httpTimeout
            }).then(function(response) {
                    return response;  

                },  function(reason) {
                    $log.error("Request Failed: ", reason)
                });

            return promise;
        }
    }
});

コントローラーコード

app.controller('abcController',function ($scope, $log,abcFactory, Config)
{

        abcFactory.results(function(data){
            $scope.results =data;
        },function(response)
        {
          console.log("response"+response);

          if(response.status === 0)
          {
              console.log("gotcha");
               $scope.serviceTimedoutError(response.data, response.status, response.config);
          } else
          {
                console.log("gotcha");
                $scope.serviceFailure(response.data, response.status, response.config);
          }


        });
});

$scope.resultsサービスが良好な応答を返した場合、正常に入力されます。

また、エラーが発生した場合、コンソールに、ファクトリ コードのログからのエラー メッセージが表示されます"Request Failed: blah blah "

私の問題: エラーが発生した場合、コントローラーにエラーメッセージが表示されないのはなぜですか?"gotcha"ブラウザーコンソールでさえ印刷されません。ビューに表示できるように、コントローラーにエラーの詳細が必要です。$scope工場に行きたくない。

コントローラーコードで何が間違っていますか?

私が間違っていなければ、AngularJS Failed Resource GETに沿って何かをしています が、望ましい結果が得られません。

4

2 に答える 2

4

関数がコールバックを受け取るようにしたいようですresultsが、その引数リストは現在空です。しかし、あなたは約束を返しています。

したがって、コントローラーの呼び出しを次のように変更します。

abcFactory.results()
  .success(function() { ... })
  .error(function() { ... })

または、結果関数自体を変更します。

results: function(successCallback, errorCallback) {
  var promise = $http(...).success(successCallback).error(errorCallback);
  return promise;
}
于 2013-06-06T22:37:11.807 に答える
1

非推奨の通知 $http の従来の promise メソッドの success および error は非推奨になりました。代わりに、標準の then メソッドを使用してください。$httpProvider.useLegacyPromiseExtensions が false に設定されている場合、これらのメソッドは $http/legacy エラーをスローします。

于 2016-08-18T03:47:03.780 に答える