Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS-处理服务中的异步数据_Javascript_Angularjs - Fatal编程技术网

Javascript AngularJS-处理服务中的异步数据

Javascript AngularJS-处理服务中的异步数据,javascript,angularjs,Javascript,Angularjs,我想在服务中获取一些异步数据,这些数据需要在那里进一步处理。代码在这里 我模拟了一个带超时的异步调用,一旦收到数据,UI就会更新。 但是,我还需要处理服务中的数据(doubleData)以及以后在UI中使用的数据。比如说,我需要用一些细节来补充数据 由于调用{{doubleData()}}时数据为空,因此它从不填充数据。如何在我的服务中实现进一步处理数据的方法(异步填充,比如$http) index.html 您的问题似乎是循环中的输入错误,因为您需要访问数据[i]。val: for (var

我想在服务中获取一些异步数据,这些数据需要在那里进一步处理。代码在这里

我模拟了一个带超时的异步调用,一旦收到数据,UI就会更新。 但是,我还需要处理服务中的数据(doubleData)以及以后在UI中使用的数据。比如说,我需要用一些细节来补充数据

由于调用
{{doubleData()}}
时数据为空,因此它从不填充数据。如何在我的服务中实现进一步处理数据的方法(异步填充,比如$http)

index.html
您的问题似乎是循环中的输入错误,因为您需要访问
数据[i]。val

for (var i = 0; i < data.length; i++) {
    doubleData.push({val: 10* data[i].val});   
};
for(变量i=0;i

另一种方法(不观察变量的变化)是以绑定
doubleData
的相同方式绑定
data
,并在异步回调中调用函数以清空并用计算值填充
doubleData
。请参见此示例。

Gloopy,我修改了plnkr()以使用$http而不是timeout。我不确定plnkr是否允许服务ajax请求,因此我在本地进行了测试。这种情况下不显示数据。如果你愿意,我可以再开一家。为跟进上述问题,我们添加了一个新问题。
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;

});
[{"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}]
for (var i = 0; i < data.length; i++) {
    doubleData.push({val: 10* data[i].val});   
};