2017-05-04 17 views
1

私は "角度工場"と "角度コントローラ"を持っています。角度同期httpリクエスト

コントローラ機能を呼び出すときは、ファクトリ関数から呼び出します。 しかし、コントローラ機能は応答を待っていません。

これは私のコードです。

factory Controller

$scope.deleteCountry = function (countryId, countryName, index) { 
    alert(countryId + " " + countryName + " " + index); 
    apiUrl = url + '/' + version + '/country';   
    $scope.hasDelete = CommonFactory.deleteEntById(apiUrl,countryName,countryId);  

    alert($scope.hasDelete); 
    if ($scope.hasDelete == true) { 
     $scope.dataList.splice(index, 1); 
     ShowMessage('Hata', 'Silme işlemi başarılı', 1); 
    } 
    else { 
     ShowMessage('Hata', 'Silme işlemi başarılı değil', -1); 
    } 

} 
+0

これを実装することもコールバックを実装することもできます。あなたの選択に応じて実装することができます。 –

答えて

0

我々はJavaScript'sデフォルトの動作は、あなたのコードが実行され、それが出力を待たないであろうものは何でも、したがって、Asynchronousであることを知っているよう。あなたの問題を解決するには、callbackパターンを実装するか、promiseを実装する2つの方法があります。私はあなたに約束を履行するよう提案します。 Angular$qサービスを利用しており、これを使用してこの問題を解決することができます。最初にcommon.factoryに$qを入れてください。

common.factory('commonFactory',funtion($http,$q){ 

    //here your some code according to screenshot 

    return{ 

    deleteEntById : function (url,name,id) { var deferred = $q.defer(); 
     $http.delete(url) 
      .then(function (returnData) { 
       //Here you will check true false 
       if(returnData.status.data==-1) 
       // promise is fulfilled 
       deferred.resolve(true); 

       else 
       // promise is fulfilled 
       deferred.resolve(false); 


       return deferred.promise; 
      }).catch(function(e) { 
       // the following line rejects the promise 
       deferred.reject(e); 

      }) ; 
      // promise is returned 
     return deferred.promise; 

    } 
    } 
}); 

そして、あなたのコントローラで、我々はいくつかの変更

CommonFactory.deleteEntById(apiurl,countryName,countryId).then(function(response){ 

    //do rest all your code which is depended upon deleteEntById . 

}); 

が、私はこのことを願って作ってあげる - :私たちはいくつかの変更とコードの意志のように見えるが作ってあげるあなたのcommon.factoryで

あなたの問題を解決します。

+0

$ http自体が約束オブジェクトを送信 –

+0

これはうまくいきます。ありがとうございますKP Chundawat; – tuncgulec

+0

私はうれしいです。それはあなたにとって有益でした。 –

0

私はCommonFactory.deleteEntById()return $http.delete();

使用.then().catch()を持っている必要がありますと仮定。

CommonFactory.deleteEntById(apiUrl, countryName, countryId) 
    .then(function(response) { 
     console.log('delete success response:', response); 
     $scope.dataList.splice(index, 1); 
     ShowMessage('Hata', 'Silme işlemi başarılı', 1); 
    }) 
    .catch(function(error) { 
     console.error('delete error response:', error); 
     ShowMessage('Hata', 'Silme işlemi başarılı değil', -1); 
    }); 
+0

この素晴らしいアイデアをありがとう。働いた:) – tuncgulec

+0

助けがあれば受け入れてupvoteしてください。 –

関連する問題