2016-12-27 8 views
0

私はangularfactoryをして、サーバに何か$http通信を行い、文字列を返す。しかし、私はCannot read property 'then' of undefinedエラーが発生します。私はherehereを読みましたが、私の問題を解決することはできませんでした。

これは、サービスコードです:controllerインサイド

factory("availabilityService", ['$http', function ($http) { 

    return { 
     checkAvailability1: function (element, string) { 
      // ..... some object creation code ...... 
      $http({ 
       method: 'POST', 
       url: 'server/server.php', 
       data: AvailableObj, 
       headers: { 
        'Content-Type': 'application/x-www-form-urlencoded' 
       } 
      }) 
       .then(function successCallback(response) { 
        return response; 

       }, function errorCallback(response) { 
       }); 
     } 
    } 
}]); 

$scope.checkAvailability = function (element, string) { 
    availabilityService.checkAvailability1(element, string).then(function (response) { //on this line the error occurs 
     console.log(response); 

    }); 

答えて

2

あなたは$httpすなわちによって返された約束を返却する必要があるが、取得するには$ HTTPの前に「リターン」を追加あなたのコードは以下のように動作します:

return $http(...) 
    .then(function successCallback(response) { 
     return response; 
    }, function errorCallback(response) { 
    }); 

これは、t彼はコントローラから呼び出された機能を.thenという方法で実装する必要があります。つまり、それは約束でなければなりません。 checkAvailability1の角度では、あなたのファンクション$httpによって工場から戻される必要があります。成功したコールバックからの応答を返すだけです。これは、コントローラのメソッドでは期待されていません。

+0

これの背後にある論理を説明できますか?私はすでにオブジェクト自体とhttp要求の応答を返しました。 – undroid

+2

@undroid実際に$ http要求(checkAvailability1)を行った関数からではなく、その応答を_callbackメソッド_から返します。その結果は、checkAvailability1の範囲外には決して行きません。 return文は暗黙的にコールスタックを介して "バブルアップ"しません。 –

関連する問題