Я хочу получить некоторые асинхронные данные в сервисе, которые нуждаются в дальнейшей обработке там. Код находится здесь plnkr,
Я имитирую асинхронный вызов с таймаутом, и после получения данных пользовательский интерфейс обновляется. Но мне также необходимо обработать данные в сервисе (doubleData), а затем использовать в моем пользовательском интерфейсе. Скажем, мне нужно увеличить данные с некоторыми особенностями.
Так как данные являются нулевыми, когда вызывается {{doubleData()}}
, он никогда не заполняет его. Как я могу достичь способа обработки данных дальше в моей службе (которая заполнена async - скажем $http)?
index.html
<!doctype html>
<html ng-app="myApp">
<head>
<script type="text/javascript" src="../../../angular-1.0.2/angular.js"></script>
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<div ng-controller="MainCtrl">
{{data}}<br>
{{doubleData()}}
</div>
</body>
</html>
script.js
var app = angular.module('myApp',[]);
app.factory('myService', function($timeout) {
var data = [],
doubleData = [];
var myService = {};
myService.async = function() {
$timeout(function(){
data.length = 0;
for(var i = 0; i < 10; i++){
data.push({val: Math.random()});
}
}, 5000);
};
myService.data = function() { return data; };
myService.doubleData = function() {
doubleData = []
for (var i = 0; i < data.length; i++) {
doubleData.push({val: 10* data[i]});
};
return doubleData;
};
return myService;
});
app.controller('MainCtrl', function( myService,$scope) {
myService.async();
$scope.data = myService.data();
$scope.doubleData = myService.doubleData;
});
Выход (через 5 секунд):
[{"val":0.4908415926620364},{"val":0.25592787051573396},{"val":0.8326190037187189},{"val":0.6478461190126836},{"val":0.8502937415614724},{"val":0.19280604855157435},{"val":0.06115643493831158},{"val":0.5100495833903551},{"val":0.4134843284264207},{"val":0.5548313041217625}]
[{"val":null},{"val":null},{"val":null},{"val":null},{"val":null},{"val":null},{"val":null},{"val":null},{"val":null},{"val":null}]