$http.get 在执行 $http.post 后返回旧查询,我做错了什么?
$http.get returning an old query after doing $http.post, what am i doing wrong?
我是 angular 的新手,目前我在一个网站工作,该网站在插入 table "Puntaje" 之前将玩家得分保存在 postgres 数据库中我必须将游戏的 ID 和玩家的 ID 保存到另一个 table 中,我的代码实际上是这样做的,但是当我尝试在这样的 table 中检索最后插入的 ID 时,它 returns 查询好像没有插入密钥,虽然在数据库中显示它已插入,代码如下:
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);
}))
}))}
为什么会这样?我该如何解决?
提前致谢。
$http.post
和 $http.get
是异步的。您需要在 post 完成后调用 get。在 post 之后和内部回调调用 get.
使用 then
当您发出多个 异步 请求时,这些请求取决于彼此的结果,您需要确保每个请求都已完成,然后再继续下一个请求.
为此,您可以使用 $http returns 的承诺,并在回调函数中添加依赖调用,如此
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);
});
});
});
});
});
我是 angular 的新手,目前我在一个网站工作,该网站在插入 table "Puntaje" 之前将玩家得分保存在 postgres 数据库中我必须将游戏的 ID 和玩家的 ID 保存到另一个 table 中,我的代码实际上是这样做的,但是当我尝试在这样的 table 中检索最后插入的 ID 时,它 returns 查询好像没有插入密钥,虽然在数据库中显示它已插入,代码如下:
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);
}))
}))}
为什么会这样?我该如何解决? 提前致谢。
$http.post
和 $http.get
是异步的。您需要在 post 完成后调用 get。在 post 之后和内部回调调用 get.
then
当您发出多个 异步 请求时,这些请求取决于彼此的结果,您需要确保每个请求都已完成,然后再继续下一个请求.
为此,您可以使用 $http returns 的承诺,并在回调函数中添加依赖调用,如此
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);
});
});
});
});
});