2016-12-04 36 views
1

我是一個有角度的新手,現在我正在一個網站上工作,在將一個postgres數據庫中的玩家比分保存在一個網站之前,在插入表格「Puntaje」之前,我必須保存遊戲ID和ID播放器到另一個表中,我的代碼實際上是這樣做的,但是當我試圖檢索這個表中最後插入的ID時,它會返回一個查詢,就好像它沒有插入密鑰一樣,儘管在數據庫中它顯示它已插入,這裏是代碼:

angular.module('clienteJuegoApp').controller('Juego1Ctrl', function ($scope, $http){ 
$scope.juego = "Survive"; 
$scope.add = function(){ 

    //First part, saves the gameID and the Player ID into the 1st table 
    console.log($http.get('http://127.0.0.1:8080/v1/jugador').then(function(response) { 
    console.log($scope.d = response.data); 
    console.log("long"+$scope.d.length); 
    console.log("idjugaor"+$scope.d[$scope.d.length-1].Id); 
    var datosJuegoJugador={ 
     idjuego: {Id:1}, 
     idjugaor:{Id:$scope.d[$scope.d.length-1].Id} 
    }; 
    $http.post("http://127.0.0.1:8080/v1/juegojugador", datosJuegoJugador); 
    console.log("se inserto"); 


    //Second part, retrieve the last inserted Id of the previous table 

    console.log($http.get('http://127.0.0.1:8080/v1/juegojugador').then(function(response2) { 
    console.log($scope.dj = response2.data) 
    console.log("idjuegojugador:"+$scope.dj[$scope.dj.length-1].Id) 

    var data = { 
     Idjuegojugador: {Id: $scope.dj[$scope.dj.length-1].Id}, 
     Puntaje: parseInt($("input:text[name=puntaje]").val()) 
    }; 

    console.log(data) 
    $http.post("http://127.0.0.1:8080/v1/puntaje", data); 
    })) 
}))} 

爲什麼會發生?我該如何解決它? 在此先感謝。

回答

1

由於您正在製作多個異步請求取決於彼此的結果,您需要確保每個請求都已完成,然後再轉到下一個請求。

要做到這一點,你可以使用$ HTTP回報的承諾,並在隨後的回調函數,因爲這

angular.module('clienteJuegoApp').controller('Juego1Ctrl', function ($scope, $http){ 
    $scope.juego = "Survive"; 
    $scope.add = function(){ 

     $http.get('http://127.0.0.1:8080/v1/jugador') 
      .then(function(response) { 
       $scope.d = response.data); 
       var datosJuegoJugador={ 
        idjuego: {Id:1}, 
        idjugaor:{Id:$scope.d[$scope.d.length-1].Id} 
       }; 

       $http.post("http://127.0.0.1:8080/v1/juegojugador", datosJuegoJugador).then(function(response2) { 

        $http.get('http://127.0.0.1:8080/v1/juegojugador').then(function(response3) { 
         $scope.dj = response3.data 
         var data = { 
          Idjuegojugador: {Id: $scope.dj[$scope.dj.length-1].Id}, 
          Puntaje: parseInt($("input:text[name=puntaje]").val()) 
         }; 
         $http.post("http://127.0.0.1:8080/v1/puntaje", data); 
        }); 
       }); 
     }); 
    }); 

}); 
+0

非常感謝,它就像一個魅力! –

+0

太棒了:-)祝你有美好的一天 –

1

$http.post$http.get是異步的。你需要在帖子完成後調用get。郵政和內部回撥呼叫獲得後使用then

+0

它沒有工作......你能解釋更多內容,請加視電話? –