2016-03-03 2 views
0

Как получить доступ к ответу внутри контроллера из вложенного $ http, который находится внутри фабрики. здесь у нас есть два вызова службы. Один внутри другого. Мне нужен ответ второго вызова службы в моем контроллере. Я могу получить доступ к фабрике от контроллера, а также ответ внутри фабрики, но когда приходит к функции успеха контроллера, она показывает, что функция успеха не определена.Как получить доступ к заводскому методу внутри контроллера?

завод код: здесь я звоню вложенный сервис $ HTTP называет

bosAppModule.factory("ServiceCalls",function($http){ 

    var ServiceCalls={}; 
    var createFilterString = function(crudObject, callback) { 
     var filterString = ""; 
     var keyValuePairs = []; 

     // iterate over the property 
     for(var property in crudObject) { 
      if(!(crudObject[property] instanceof Object)) {// if it is primitive type 
       // check the value is not null or undefined 
       if(crudObject[property] && crudObject[property] != "") 
        // added the key value string 
        keyValuePairs.push(property + "~;~" + crudObject[property]); 
      } 
     } 

     // add first key value pair 
     if(keyValuePairs[0]) 
      filterString += keyValuePairs[0]; 

     // iterate over the key value strings 
     for(var i = 1; i < keyValuePairs.length; i++) { 
      filterString += "~$~" + keyValuePairs[i]; 
     } 

     try { 
      if(callback) callback(filterString); 
     } catch(e) { 
      console.log("Exception inside $dataTransactor->createFilterString" + e.message); 
     } 
    }; 

// var headers = {Authorization: COOKIES.readCookie("Authorization"),requestmode:"ACK_URL"}; 
// headers.isRender = file.isRender; 
// if(file.inputDataHeaders) 
//  headers.inputData = file.inputDataHeaders; 

    ServiceCalls.getData = function(filterObject, file){ 

     createFilterString(filterObject, function(filterString){ 
      var headers = {Authorization: COOKIES.readCookie("Authorization"),requestmode:"ACK_URL"}; 
      headers.isRender = file.isRender; 
      if(file.inputDataHeaders) 
       headers.inputData = file.inputDataHeaders; 

      $http({ 
       method: 'GET', 
       url: file.fileUrl + "/" + $securityComponent.cryptograghicFunctions.encryptor(filterString), 
       headers: headers 
      }) 
      .then(function(requestHandlerResponce) { 
       console.log(requestHandlerResponce); 
       $http({ 
        method: 'GET', 
        url: requestHandlerResponce.data.links[1].href, 
        headers: headers 
       }).then(function(responceHandlerResponce) { 
        console.log("##### : "+JSON.stringify(responceHandlerResponce.data)); 
        return responceHandlerResponce; 
       }); 
      }) 



     }); 

    }; 

    return ServiceCalls 
}); 

контроллера код: здесь мне нужен ответ

bosAppModule 
     .controller(
       "custom-entity-design-ctrl", 
       function($scope, $document, $http, $localStorage, navigateEntityUrl, entityFormation,layoutDesignFactory, ServiceCalls) { 

        var layoutDesignFac=new layoutDesignFactory(); 
        var entityJson='{"entityInfo":{"entity":"","tenantId":"2b69af63-e2dc-43e5-9f0e-9fde52032d4c","timeStamp":"Tue Jun 16 2015 19:05:09 GMT+0530 (India Standard Time)"},"collections":{"Entity":{"meta":{"parentReference":"***","pkName":"***","fkName":"***"},"rowSet":[],"rowFilter":[]}}}'; 
        var crudObject = {}; 
        var file = { 
         fileUrl: $config.UIMetaData, 
         inputDataHeaders: entityJson 
        }; 


        ServiceCalls.getData(crudObject,file).success(function(response){console.log(response)}); 

}); 
+0

'ServiceCalls.getData' не возвращают любое обещание, вам лучше использовать ['$ q'] (https://docs.angularjs.org/api/ng/service/$q) –

ответ

0

Ваших услуги должны быть возвращающимся обещание (за $ HTTP вызова в вашем случае) к контроллеру:

return $http({    // return this promise 
    method: 'GET', 
    url: file.fileUrl + "/" + $securityComponent.cryptograghicFunctions.encryptor(filterString), 
    headers: headers 
}).then(function(requestHandlerResponce) { 
    console.log(requestHandlerResponce); 
    return $http({   // return this promise as well 
    method: 'GET', 
    url: requestHandlerResponce.data.links[1].href, 
    headers: headers 
}).then(function(responceHandlerResponce) { 
    console.log("##### : "+JSON.stringify(responceHandlerResponce.data)); 
    return responceHandlerResponce; 
}); 

И только для последовательной попытки u зе стандартного .then метода, а не .success или .error в контроллере:

ServiceCalls.getData(crudObject,file).then(function(response) { 
    console.log(response) 
}); 

Последних несколько неактуальной ноте, я думаю, что «ответ» написан с ошибками в службе;)

Смежные вопросы