2016-09-27 1 views
0

myData генерируются в myFactory, и следующий код работает, если myData генерируется из одной myHttp.GetGroupMember функции.

Однако он не работает с несколькими вызовами GetGroupMember, поскольку они выполняют «одновременно», а dataContainer получает инициализацию от вызова createMyData.

Как я могу назвать второй GetGroupMember после первого GetGroupMember «закончен»?

var myFactory = function (myHttp) { 

    var myData = []; 
    var dataContainer = []; 
    var numProgress; 

    var onSuccess = function(data_member) { 
     myData.push(data_member); 
     numProgress++; 
     loadMember(dataContainer); // if member is succefully loaded, load next member 
     // if numProgress == data_member.length, call next GetGroupMember() here? 
    } 

    var loadMember = function(data_group) { 
     if (numProgress < data_group.length) { 
      myHttp.getMemberDetails(data_group.division, data_group.members[numProgress]).then(onSuccess, onError); 
     } 
    } 

    var createMyData = function(response) { 
     dataContainer = response; // coded as shown to call loadMember() iteratively 
     loadMember(dataContainer); 
    } 

    var getMyData = function(init) { 
     myHttp.getGroupMember("Division1", "Group_Foo").success(createMyData); // getGroupMember_1 
     // how to call getGroupMember_2 after getGroupMember "finished"? 
     myHttp.getGroupMember("Division2", "Group_Bar").success(createMyData); // getGroupMember_2 

     return myData; 
    } 
} 

var myControl = function($scope, myFactory) { 

    $scope.myData = myFactory.getMyData(); 
} 

ответ

1

Проще всего в мире:

myHttp.getGroupMember("Division1", "Group_Foo") 
.success(createMyData) 
.then(function() { 
    return myHttp.getGroupMember("Division2", "Group_Bar") 
}).success(createMyData); 

Читайте на promises.

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