2016-09-27 60 views
0

myDatamyFactory产生利用工厂,下面的代码工作如果从一个单一的myHttp.GetGroupMember函数生成myData

但是,它不会与多个GetGroupMember调用一起使用,因为它们在“同一时间”执行,并且dataContainercreateMyData调用中初始化。

如何在第一次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