2017-04-18 83 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?') 
     }) 

    }