2017-04-18 80 views
0

你好我有三个带有链接记录的表(下一个表中的记录在前面表中的记录上有链接)。 现在我想在下表中删除表格中的他的孩子的记录。 我想使用递归,但我有承诺的问题。这里是我的代码:有角度的http承诺和递归

$scope.removeItem = function (table, itemId) { 
       var nextTableIndex = table.index + 1; 
       dbService.remove(table, [{ 
        by: table.parentColumn == undefined ? "ID" : table.parentColumn, values: itemId 
       }]); 


       while (nextTableIndex < config.tables.length) { 
        var nextTable = config.tables[nextTableIndex]; 
        dbService.getTableItems(nextTable.id, ["ID"], [{ by: nextTable.parentColumn, values: itemId }]) 
         .then(function (data) { 
          var ids = select(data, "ID"); //return array with all ids ([1,2,3]) 
          $scope.removeItem(config.tables[table.index + 1], ids); 
         }); 

        nextTableIndex++; 
       } 
      } 

dbService.getTableItems = function(tableId, columns, where){ //return promise 
    return $http.get(createUrl(tableId, columns, where)); 
} 

只从第一个表格和最后一个表格中删除。在递归中使用last last下一个表,因为它首先执行整个过程,而不是执行“then”函数。我需要首先从数据库加载数据,然后再调用下一个代码。

如何立即加载数据是一种可能性?喜欢的东西:dbService.getTableItems(...).toArray()

谢谢

回答

1

我并不清楚地了解你,但是你可以试试这个

JS

$scope.removeItemRecursivly = function() { 

     var nextTableIndex = 0; 

     var currentTable = config.tables[nextTableIndex]; 

     dbService.remove(currentTable, [{ 
         by: currentTable.parentColumn == undefined ? "ID" : currentTable.parentColumn, values: itemId 
        }]); 


     var removePromises = [];   

     function removeItem(){ 

      if(nextTableIndex < config.tables.length) { 

       return new Promise(function(resolve, reject){ 

        var nextTable = config.tables[nextTableIndex]; 
        nextTableIndex = nextTableIndex + 1; 

        dbService.getTableItems(nextTable.id, ["ID"], [{ by: nextTable. parentColumn, values: itemId }]) 
         .then(function (data) { 

          removePromises.push(removeItem()) 

          resolve('Finish with table with index: ' + (nextTableIndex - 1)); 


         }); 


       }) 
      } 

     } 

     removePromises.push(removeItem()) 

     Promise.all(removePromises).then(function(){ 
       console.log('finish?') 
     }) 

    }