2017-08-30 45 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