0

ここで私はHttpリクエストを作成し、最初のサービスコールからの応答を取得し、2番目のサービス内の最初のサービスの応答を渡し、コントローラ。ネストされたサービスを渡して、角度ファクトリからコントローラに応答を得る方法

私は応答を得ました、どのように私はコントローラに入ることができました。

app.factory('logHomeService', function() { 

     var getHomeService = function (LoginService, HomeService) { 
      return 
      { 
       LoginService.After("user", encodeURIComponent("pass")) 
        .then(function (response) { 
         debugger; 
         $stateParams.User = "admin"; 

         var mydata = response.CT1SessionObj; 


         var DefaultModelObj = { cobj: mydata}; 

         HomeService.pageLoad(DefaultModelObj) 
        .then(function (response) { 
         $rootScope.CT1SessionObj = response.mydata; 



        }, function (response) { 
         console.log("LoginService" + response.data); 
         alert(response.Message); 
        }); 

        }, 

         function (response) { 
          console.log("Home Service" + response.data); 
          return response.data; 
         }); 
       return response.data; 
      }; 
     }; 
     return { 
      getHomeService: getHomeService 
     } 

}); 

app.Controller('HomeController',function($scope,logHomeService) 

{ 


this.logHomeService = logHomeService; 
} 

ここthis.logHomeService = logHomeService、私はコントローラにホームサービス応答を返す必要があり、第2のサービスから

を応答結果を取得する方法、工場での方法を返すにconsole.log(「ホームサービス」 + response.data);

答えて

1

プロミスを使用し、コントローラーの解像度を聞く必要があります。

app.factory('logHomeService', function($q) { 
    var getHomeService = function(LoginService, HomeService) { 
    // create a promise object 
    var deferred = $q.defer(); 

    LoginService.After("user", encodeURIComponent("pass")).then(
     function(response) { 
     $stateParams.User = "admin"; 
     var mydata = response.CT1SessionObj; 

     var DefaultModelObj = { 
      cobj: mydata 
     }; 

     HomeService.pageLoad(DefaultModelObj).then(
      function(response) { 
      $rootScope.CT1SessionObj = response.mydata; 
      // resolve the promise 
      deferred.resolve(response); 
      }, 

      function(response) { 
      console.log("LoginService" + response.data); 
      // reject the promise if there is an error 
      deferred.reject(response); 
      alert(response.Message); 
      }); 
     }, 

     function(response) { 
     console.log("Home Service" + response.data); 
     // reject the promise if there is an error 
     deferred.reject(response) 
     }); 

    // return the promise 
    return deferred.promise 
    }; 
    return { 
    getHomeService: getHomeService 
    } 
}); 

最初に$qを工場に注入します。次に、getHomeService()メソッドから約束を返します。

約束は3か所で解決され、2回の拒否と1回の解決です。拒否は、呼び出しが失敗したときにコントローラで何かを行うために使用できます。

次に、コントローラを更新して約束を聞いてください。

app.Controller('HomeController', function($scope, logHomeService){ 
    this.logHomeService = logHomeService; 

    this.logHomeService.getHomeService().then(
    function(successResponse){ 
     // success 
    }, 
    function(failureResponse){ 
     // failure 
    } 
) 
} 
0

@Thanksあなたは私の一日を許します。工場では2つのサービスを使用していますが、私が約束したサービスでは工場では使用されていません。

var service1 = function ($http, $q, configAPI) { 
    var crContractApi_Url = configAPI.crContractApi_Url; 
    this.pageLoad = function (params) { 
     var result = $q.defer(); 
     params.obj.data = null; 
     $http({ 
      method: 'POST', 
      url: baseurl + '/reatiler/retailer', 
      headers: { 'Content-Type': 'application/json' }, 
      data: JSON.stringify(params) 
     }) 
     .success(function (response) { 

      result.resolve(response); 
     }) 
     .error(function (response) { 

      result.reject(response); 
     }); 

     return result.promise; 
    } 

サービス2で使用されるものと同じです。 Theraは他の方法である

関連する問題