2017-08-30 73 views
0

我有一个问题,我需要输入数据,然后显示一个消息让我进入到数据库中正确的金额。问题是我无法知道引入的数量,因为它是一个REST服务,并且该变量对我不起作用。发送消息后,进入数据

如何在输入变量后存储所有结果?它们是否失败或正确无关紧要。

angular.forEach($scope.usersData, function(obj){ 
    dataUser = { 
     users_id: obj.id, 
     tipo_salida: 'NORMAL', 
     dia_control: moment($scope.date_food).format('YYYY-MM-DD'), 
     amanecida: numValue(obj.amanecida), 
     cena: numValue(obj.cena), 
     te: numValue(obj.te), 
     almuerzo: numValue(obj.almuerzo), 
     desayuno: numValue(obj.desayuno), 
     fecha_registro: moment().format('YYYY-MM-DD hh:mm:ss') 
    }; 
    diningroomsFactory.addDiningRooms(dataUser).then(function (response) { 
     if(response.data.result === "success") 
     { 
      datCorrectCounter.push({ 
       data: response.data.result 
      }); 
     } 
    }); 
}); 

console.log(datCorrectCounter); //[] always empty 
Notification.success("se introdujo correctamente: ", datCorrectCounter.length); 
$state.go("diningroomsListNormals"); 

回答

0

的这里的问题是,diningroomsFactory.addDiningRooms返回一个承诺,一个forEach里面,当没有尚未解决的承诺正在执行console.log(datCorrectCounter);

这里的解决方法是$q.all,它将多个承诺组合成一个单一的承诺,当所有输入承诺都解决时解决。

var datCorrectCounter = []; 
var promisesArray = []; // empty array to store all promises 

angular.forEach($scope.usersData, function(obj){ 
    dataUser = { 
     users_id: obj.id, 
     tipo_salida: 'NORMAL', 
     dia_control: moment($scope.date_food).format('YYYY-MM-DD'), 
     amanecida: numValue(obj.amanecida), 
     cena: numValue(obj.cena), 
     te: numValue(obj.te), 
     almuerzo: numValue(obj.almuerzo), 
     desayuno: numValue(obj.desayuno), 
     fecha_registro: moment().format('YYYY-MM-DD hh:mm:ss') 
    }; 

    // store the promise in a variable 
    var aPromise = diningroomsFactory.addDiningRooms(dataUser).then(function (response) { 
     if(response.data.result === "success") 
     { 
      datCorrectCounter.push({ 
       data: response.data.result 
      }); 
     } 
    }); 

    // push the promise in the array 
    promisesArray.push(aPromise); 
}); 

$q.all(promisesArray).then(function(){ 
    console.log(datCorrectCounter); //it shouldn't be empty 
    Notification.success("se introdujo correctamente: ", datCorrectCounter.length); 
    $state.go("diningroomsListNormals"); 
}); 

我小细节约$q.all,如果任何承诺与拒绝(失败)解决,导致承诺将与同样拒绝值拒绝。

希望它有帮助

+0

哈哈,给-1的那个,能解释为什么吗?如果您认为有什么不对,请说明原因,这样做可以正确。 –

+0

不知道他们为什么给你-1,好的解决方法+1 :) – cnorthfield