2016-10-06 4 views
0

У меня есть сценарий, в котором есть 8 Web API, называется:Вызов нескольких веб-апи, используя угловую Js один за другим

#1 
Sync Local DB from server DB (response will RETURN a List=> myList)   
If (myList.Length > 0) 
#1.1 Call web Api to Insert/Update Local DB 
#2 
Sync Server DB from Local DB (Request goes with a List=> myList) 
      If (myList.Length > 0) 
#2.1 Call web Api to Insert/Update in Server DB (Response will RETURN a List=> newList) 
If(newList.length > 0) 
#2.2 Call web Api to Insert/Update in Local DB 

У меня есть два отдельных процесса для таблиц сбора головы и головы, которая синхронизирована с выше процесса , Таким образом, есть сценарий №3 и №4.

У меня есть вызов Web API следующим образом ...

syncHeadDataLogic(); 
syncHeadCollectionDataLogic(); 

мне нужно, чтобы данные головы должны быть синхронизированы первые данные затем HeadCollection синхронизированные. Но если для главы нет обновленной записи, тогда выполняется сборка Head. В моем сценарии моя веб-авиза вызвана в любом порядке, но мне нужен заказ, как я описал выше. Пожалуйста, предложите мне, как я это достиг.

#Updated

//Sync Head 


     $scope.initializeController = function() { 
      if ($scope.online) { 
       //debugger; 
       syncHeadDataLogic(); 
       syncHeadCollectionDataLogic(); 

      } 
     }; 

     function syncHeadDataLogic() { 
      HeadService.HeadSyncLocalDB(parseInt(localStorage.headRevision, 10), $scope.completeds, $scope.erroe); 
     }; 

     $scope.SynServerDBCompleted = function (response) { 
      debugger; 
      $scope.HeadListForSync = response.HeadList; 

      var tempHeadCurrencyDetail = []; 
      if ($scope.HeadListForSync.length > 0) { 

       angular.forEach($scope.HeadListForSync, function (xx) { 
        xx.CurrencyId = xx.CurrencyServerId; 
        xx.Id = xx.HeadServerId; 
        angular.forEach(xx.HeadCurrencyDetail, function (yy) { 
         yy.CurrencyId = yy.CurrencyServerId; 
         yy.HeadId = xx.HeadServerId; 

         if (yy.Revision == -1) 
          tempHeadCurrencyDetail.push(yy); 
        }); 
        xx.HeadCurrencyDetail = tempHeadCurrencyDetail; 
       }); 


       var postData = { Revision: parseInt(localStorage.headRevision, 10), HeadList: $scope.HeadListForSync }; 
       HeadService.SynServerDB(postData, $scope.completed, $scope.erroe); 
      } 
      else { 
       // alertsService.RenderSuccessMessage("There is no change in data after your last synchronization."); 
      } 


     }; 

     $scope.requestErrorwer = function (response) { 
      debugger; 
     }; 


     $scope.completed = function (response) { 
      debugger; 
      if (response.RevisionNo == localStorage.headRevision) { 
       syncHeadCollectionDataLogic(); 
       // alertsService.RenderErrorMessage("There is newer version on the server. Please Sync from server first.", "MessageAlert"); 
      } 
      else { 
       syncData(response); 
      } 

     }; 
     $scope.completeds = function (response) { 
      debugger; 
      if (response.RevisionNo == localStorage.headRevision) { 
       syncHeadCollectionDataLogic(); 
       // alertsService.RenderSuccessMessage("You are already working on the latest version", "MessageAlert"); 
      } 
      else { 
       syncData(response); 
      } 

      // 
      var request = new Object(); 
      HeadService.getAllHeadForRevision(request, $scope.SynServerDBCompleted, $scope.requestErrorwer); 
     }; 
     $scope.erroe = function (response) { 
      debugger; 
      // alertsService.RenderErrorMessage("Data Synchronization Failed", "MessageAlert"); 
     }; 
     function syncData(data) { 
      debugger; 
      $scope.ReturnedRevisonNo = data.RevisionNo; 
      if (data.HeadList && data.HeadList.length > 0) { 
       var postData = { Revision: $scope.ReturnedRevisonNo, HeadList: data.HeadList, HeadRevision: $scope.ReturnedRevisonNo }; 
       HeadService.AddUpdateHeadAfterSync(postData, $scope.cmpSync, $scope.Error); 
      } 
      else { 
       syncHeadCollectionDataLogic(); 
      } 

     }; 
     $scope.cmpSync = function (response) { 
      debugger; 
      localStorage.headRevision = $scope.ReturnedRevisonNo;; 
      alertsService.RenderSuccessMessage("The synchronization has been completed successfully."); 
      syncHeadCollectionDataLogic(); 
     }; 

     $scope.Error = function (response) { 
      debugger; 
     // alertsService.RenderErrorMessage(response.ReturnMessage); 
     // alertsService.SetValidationErrors($scope, response.ValidationErrors); 
     }; 
     ////////////Sync End 


     //Sync Head Collection 


     function syncHeadCollectionDataLogic() { 
      HeadService.HeadSyncLocalCollectionDB(parseInt(localStorage.headCollectionRevision, 10), $scope.completedCollections, $scope.erroeCollection); 
     }; 


     $scope.SynServerDBCompletedCollection = function (response) { 
      $scope.HeadCollectionListForSync = response.HeadCollectionList; 
      if ($scope.HeadCollectionListForSync.length > 0) { 
       angular.forEach($scope.HeadCollectionListForSync, function (value, index) { 
        value.Id = value.HeadCollectionServerId; 
        angular.forEach(value.HeadCollectionDetails, function (v) { 
         v.CommittedCurrencyId = v.CommittedCurrencyServerId; 
         v.HeadId = v.HeadServerId; 
         v.WeightId = v.WeightServerId; 
         v.HeadCollectionId = value.HeadCollectionServerId; //change 

         angular.forEach(v.HeadCollectionAmountDetails, function (xx) { 
          xx.CurrencyId = xx.CurrencyServerId; 
         }); 

        }); 

       }); 
       var postData = { Revision: parseInt(localStorage.headCollectionRevision, 10), HeadCollectionList: $scope.HeadCollectionListForSync }; 
       HeadService.SynServerCollectionDB(postData, $scope.completedCollection, $scope.erroeCollection); 
      } 
      else { 
       // alertsService.RenderSuccessMessage("There is no change in data after your last synchronization."); 
      } 


     }; 

     $scope.requestErrorwerCollection = function (response) { 
     }; 


     $scope.completedCollection = function (response) { 
      if (response.RevisionNo == localStorage.headCollectionRevision) { 
       // alertsService.RenderErrorMessage("There is newer version on the server. Please Sync from server first.", "MessageAlert"); 
      } 
      else { 
       syncDataCollection(response); 
      } 

     }; 
     $scope.completedCollections = function (response) { 
      if (response.RevisionNo == localStorage.headCollectionRevision) { 
       // alertsService.RenderSuccessMessage("You are already working on the latest version", "MessageAlert"); 
      } 
      else { 
       syncDataCollection(response); 
      } 
      var request = new Object(); 
      HeadService.getAllHeadCollectionForRevision(request, $scope.SynServerDBCompletedCollection, $scope.requestErrorwerCollection); 
     }; 
     $scope.erroeCollection = function (response) { 
      // alertsService.RenderErrorMessage("Data Synchronization Failed", "MessageAlert"); 
     }; 
     function syncDataCollection(data) { 
      $scope.ReturnedRevisonNo = data.RevisionNo; 
      if (data.HeadCollectionList && data.HeadCollectionList.length > 0) { 
       var postData = { Revision: $scope.ReturnedRevisonNo, HeadCollectionList: data.HeadCollectionList, HeadRevision: $scope.ReturnedRevisonNo }; 
       HeadService.AddUpdateaHeadCollectionAfterSync(postData, $scope.cmpSyncCollection, $scope.ErrorCollection); 
      } 
     }; 
     $scope.cmpSyncCollection = function (response) { 
      localStorage.headCollectionRevision = $scope.ReturnedRevisonNo;; 
      alertsService.RenderSuccessMessage("The synchronization has been completed successfully."); 
      $scope.initializeController(); 
     }; 

     $scope.ErrorCollection = function (response) { 
      // alertsService.RenderErrorMessage(response.ReturnMessage); 
      // alertsService.SetValidationErrors($scope, response.ValidationErrors); 
     } 
     //End 

ответ

0

мне нужно, чтобы данные головы должны быть синхронизированы первые данные затем HeadCollection синхронизированные. Но если для главы нет обновленной записи, тогда выполняется сборка Head.

Что вам нужно, это прикованные обещания. Попробуйте это (я даю вам псевдокод сейчас):

HeadService.HeadData 
|-----------------| 
        HeadCollection(headDataResult) 
        |------------------| 
            finalHandler(headCollectionResult) 
            |------------------| 




HeadService.HeadData() 
    .then(HeadService.HeadCollection) // return or throw Err if headDataResult is empty 
    .then(finalHandler); 

Здесь порядок выполнения обещаний будет предсказуемым и последовательным. Кроме того, каждое обещание будет возвращено разрешенное значение предыдущего обещания

AngularJS, как вы можете видеть в документации здесь, использует Promises из коробки с инъекцией $http. Вы можете определить такую ​​фабрику как:

// Factory code 
.factory("SampleFactory", function SampleFactory($http) { 
    var sampleFactoryObject = {}; 
    sampleFactoryObject.getSomething = function() { 
    return $http.get('/someUrl'); 
    } 
    sampleFactoryObject.getSomething.then(function resolveHandler(res) { 
    return res; 
    }, 
    function rejectHandler(err) { 
    throw new Error(err); 
    }); 
    sampleFactoryObject.getSomethingElse = function() { 
    return $http.get('/someOtherUrl'); 
    } 
    sampleFactoryObject.getSomethingElse.then(function resolveHandler(res) { 
    return res; 
    }, 
    function rejectHandler(err) { 
    throw new Error(err); 
    }); 
    return sampleFactoryObject; 
}); 

// Controller code 
.controller('myController', function myController(SampleFactory) { 
    SampleFactory.getSomething() 
    .then(SampleFactory.getSomethingElse()) 
    .then(finalHandler); 

var finalHandler = function(resultOfGetSomethingElse) { 
    console.log(resultOfGetSomethingElse); 
    } 
}); 
+0

Я использовал метод ввода и вывода ajax. Здесь Head Collection не зависит от главы. Моя потребность в том, что мой 8 веб-apis должен звонить один за другим. Я не знаю о обещаниях. Можете ли вы, пожалуйста, привести пример, как мой 8-й авиз вызвал один за другим. – coolForNet

+0

Ответить udpdated – nikjohn

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