Der Controller:
var activeArr = [];
var activeDate = [];
var day = (endDate - startDate) / (24 * 60 * 60 * 1000);
for (var i = 1; i < day + 1; i++) {
activeDate.push(endDate - (24 * 60 * 60 * 1000) * i);
var start = endDate - (24 * 60 * 60 * 1000) * i;
var end = endDate - (24 * 60 * 60 * 1000) * (i - 1);
statisService.getRegStatis(start, end).then(function(response) {
console.log(response.data.data); //can get data
activeArr.push(response.data.data)
});
}
console.log(activeArr); //nothing in the array
console.log(activeDate); // can push data into this array
Der Service:
userServiceModule.factory('statisService', ['$http','serverUrl', function($http,serverUrl){
return {
getRegStatis: function(startDate,endDate){
var url = serverUrl +"/adminDA/dbReport?startTime="+startDate+"&endTime="+endDate;
return $http.get(url);
}
};
}])
Ich kann die Daten von der Servicemethode abrufen. Danach möchte ich die Daten in ein Array verschieben, aber das Array enthält nichts. Wird dies durch das Versprechen verursacht? Das ist die Konsole:
3 Antworten
Das Problem ist, dass Sie das Array protokollieren, bevor das Versprechen gelöst wurde. Aktualisieren Sie Ihren Code, um den Array-Wert in Ihrem .then
callback
zu protokollieren, nachdem Sie das activeArr
Array aktualisiert haben
var activeArr = [];
var activeDate = [];
var day = (endDate - startDate) / (24 * 60 * 60 * 1000);
for (var i = 1; i < day + 1; i++) {
activeDate.push(endDate - (24 * 60 * 60 * 1000) * i);
var start = endDate - (24 * 60 * 60 * 1000) * i;
var end = endDate - (24 * 60 * 60 * 1000) * (i - 1);
statisService.getRegStatis(start, end).then(function(response) {
console.log(response.data.data); //can get data
activeArr.push(response.data.data)
console.log(activeArr); //now your array will be populated
});
}
console.log(activeDate); // can push data into this array
Ändern Sie zuerst Ihre Fabrik:
userServiceModule.factory('statisService', ['$http','serverUrl', function($http,serverUrl){
return {
getRegStatis: function(startDate,endDate){
var url = serverUrl +"/adminDA/dbReport?startTime="+startDate+"&endTime="+endDate;
return $http.get(url).then(function(result){
return result.data;
});
}
};
}])
Dann in der Steuerung:
var activeArr = [];
var activeDate = [];
var day = (endDate - startDate) / (24 * 60 * 60 * 1000);
for (var i = 1; i < day + 1; i++) {
activeDate.push(endDate - (24 * 60 * 60 * 1000) * i);
var start = endDate - (24 * 60 * 60 * 1000) * i;
var end = endDate - (24 * 60 * 60 * 1000) * (i - 1);
statisService.getRegStatis(start, end).then(function(data) {
console.log(data); //can get data
activeArr.push(data);
console.log(activeArr); //only now you can log activeArr because you have to wait for promise
});
}
console.log(activeDate);
$ http gibt zwar ein Versprechen zurück, aber Sie müssen es mit .then oder .success von Ihrer Factory-Funktion zurückgeben
Ein $ http gibt Ihnen ein Versprechen zurück - nicht die Daten. Sie sollten nach dem Aufruf von $ http einen Rückruf anwenden
$http.get('address').success(function(res) {
//var res is the data sent back from the request..
// in your case it should look like
return res;
});