2016-03-28 22 views
1

Bir fabrika kalıbı kullanarak eşzamanlama çağrıları yapmaya çalışıyorum.Verilen sözleri kullanarak çağrıları senkronize et Angular JS fabrikaları

$scope.doLogin = function (username, password, rememberme) { 
     appKeyService.makeCall().then(function (data) { 
//   data = JSON.stringify(data); 
      debugAlert("login controller app key service"+data); 
      var appkeyvalue = data.d.appkey; 
      sessionConfigurationService.setBasicToken(appkeyvalue); 

      loginService.makeCall(username, password, rememberme).then(function (accessTokenData) { 
       if (accessTokenData.access_token !== "") 
       { 
        sessionConfigurationService.setAccessTokenData(accessTokenData.access_token); 
        userPreferencesService.makeCall().then(function (userPreferencesData) { 
         if (userPreferencesData.d.userId !== "") 
         { 
          sessionConfigurationService.setUserPreferences(userPreferencesData.d); 
//       $window.location.href = '/base.html'; 
         } 
        }); 
       } 
      }); 
     }); 
    }; 

Benim appKeyService fabrika

app.factory('appKeyService', function ($q, authenticatedServiceFactory, configurationService) { 
    var deffered = $q.defer(); 
    var service = {}; 

    service.makeCall = function() { 
     debugAlert("appKeyService async method request start"); 
     authenticatedServiceFactory.makeCall("GET", configurationService.getAppKeyURL(), "", "").then(function (data) { 
      debugAlert("appKeyService async method response") 
      deffered.resolve(data); 
     }); 
     return deffered.promise; 
    }; 
    return service; 
}); 

My doğrulanmış hizmet fabrika

app.factory('authenticatedServiceFactory', function ($http, $q, sessionConfigurationService) { 
    var deffered = $q.defer(); 
    var service = {}; 
    service.makeCall = function (methodType, URL, data, authType) { 

     var headerValue = ""; 
     if (authType === "Basic") { 
      headerValue = sessionConfigurationService.getBasicToken(); 
     } else if (authType === "Bearer") { 
      headerValue = sessionConfigurationService.getBearerToken(); 
     } 

     var config = {headers: { 
       'Authorization': headerValue, 
       'Accept': 'application/json;odata=verbose', 
      }, 
      withCredentials: true, 
      async: false 
     }; 
     if (methodType === "GET") { 
      $http.get(URL, data, config) 
        .then(function (getData) { 
         debugAlert("GET method response" + JSON.stringify(getData)); 
         deffered.resolve(getData.data); 
        }, function (error) { 
         debugAlert("GET method response error" + JSON.stringify(error)); 
         deffered.reject(error); 
        }); 
     } 
     else if (methodType === "POST") { 
      $http.post(URL, data, config) 
        .then(function (putData) { 
         debugAlert("POST method response" + JSON.stringify(putData)); 
         deffered.resolve(putData.data); 
        }, function (error) { 
         debugAlert("POST method response error" + JSON.stringify(error)); 
         deffered.reject(error); 
        }); 
     } 
     else if (methodType === "DELETE") { 
      $http.delete(URL, data, config) 
        .then(function (deleteData) { 
         debugAlert("DELETE method response" + JSON.stringify(deleteData)); 
         deffered.resolve(deleteData.data); 
        }, function (error) { 
         debugAlert("DELETE method response error" + JSON.stringify(error)); 
         deffered.reject(error); 
        }); 
     } 
     else if (methodType === "PUT") { 
      $http.put(URL, config) 
        .then(function (putData) { 
         debugAlert("PUT method response" + JSON.stringify(putData)); 
         deffered.resolve(putData.data); 
        }, function (error) { 
         debugAlert("PUT method response error" + JSON.stringify(error)); 
         deffered.reject(error); 
        }); 
     } 
     return deffered.promise; 
    }; 
    return service; 
}); 

olduğu Ama hizmet çağrıları senkronize yapılır görmüyorum. Yani denetleyicideki "o zaman" bölümü,'dan sonra 'u çalıştırmıyor, yanıtı alıyoruz. Birbiri ardına yürütüyor. Bunu nasıl yapabilirim. @Frane Poljak

+1

Başlangıç ​​için var deffered = $ q.defer(); service.makeCall işlevlerinde –

+0

Vaatler kodunuzu eşzamanlı yapmaz. Asenkron kod yazarak sadece yardımcı oluyorlar. – Bergi

+0

[Ertelenmiş antipattern] 'den (http://stackoverflow.com/q/23803743/1048572) kaçının! Bu kodda tek bir '$ q.defer(); – Bergi

cevap

0

Yorumlarınız için teşekkür ederiz. MakeCall yönteminin içinde

'u getirdim ve şimdi istediğim gibi çalışıyorum. Teşekkür ederim!

app.factory('appKeyService', function ($q, authenticatedServiceFactory, configurationService) { 
    var service = {}; 

    service.makeCall = function() { 
    var deffered = $q.defer(); 

     debugAlert("appKeyService async method request start"); 
     authenticatedServiceFactory.makeCall("GET", configurationService.getAppKeyURL(), "", "").then(function (data) { 
      debugAlert("appKeyService async method response") 
      deffered.resolve(data); 
     }); 
     return deffered.promise; 
    }; 
    return service; 
});