输入数据

时间:2017-08-30 21:10:04

标签: javascript angularjs

我遇到问题我需要输入数据,然后显示一条消息,说明我正确输入数据库的数量。问题是我无法知道引入的数量,因为它是一个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");

1 个答案:

答案 0 :(得分:0)

这里的问题是diningroomsFactory.addDiningRoomsforEach内返回一个承诺,并且当没有解决承诺时正在执行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的一些细节,如果任何承诺通过拒绝(失败)得到解决,则产生的承诺将被拒绝并具有相同的拒绝价值。

希望有所帮助