我遇到问题我需要输入数据,然后显示一条消息,说明我正确输入数据库的数量。问题是我无法知道引入的数量,因为它是一个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 :(得分: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
的一些细节,如果任何承诺通过拒绝(失败)得到解决,则产生的承诺将被拒绝并具有相同的拒绝价值。
希望有所帮助