【问题标题】:Data returning from $http.get() is not sequence [duplicate]从 $http.get() 返回的数据不是序列 [重复]
【发布时间】:2016-04-16 16:41:01
【问题描述】:

我想从 3 个源 URL 中获取数据,仅通过 id 不同。我得到的结果很好,但不是按顺序排列的。我的代码是: var data = [{"id":"1"},{"id":"2"},{"id":"3"}]; var get = []; for(i=0;i<(data.length);i++){ $http.get("server URL"+data[i].id) .success(function(data) { get.push(data); }) .error(function(err) { console.log(err); }); }$scope.data= get; 我也进行了研究并尝试了一些东西,但无法使其正常工作。 我也尝试过this 链接,但对我来说不是那么有用。

【问题讨论】:

  • 你能拍下结果吗?
  • 我使用了我的代码演示,所以我无法发布我的实际代码演示。对不起。

标签: javascript angularjs


【解决方案1】:

您应该为此使用$q.all

var data = [{"id":"1"},{"id":"2"},{"id":"3"}],
    promises = [];

for(i = 0; i < data.length; i++)
    promises.push($http.get("server URL"+data[i].id));

$q.all(promises)
    .then(function(result) {
        $scope.data = result;
    }, function(err) {
        console.log(err);
    });

结果将是一个数组,其结果按请求的顺序

【讨论】:

  • 我得到了 promises.then 不是函数错误。你能帮我解决这个问题吗?
  • @Atula 对不起,我已经更新了我的答案,我忘了q.all
  • 非常感谢@Martijn,现在一切正常。
【解决方案2】:

您可以执行以下操作:

var data = [{"id":"1"},{"id":"2"},{"id":"3"}];
var get = [];
var i = 0;
function loadDataInSequence(){
  if(i<data.length){
    $http.get("server URL"+data[i].id)
        .success(function(data) { 
                get[i] = data;//calling callback
            loadDataInSequence();
        })
        .error(function(err) {
            console.log(err);
        });
        i++;
  }
}
$scope.data= get;

【讨论】:

    【解决方案3】:

    对于这种情况,有一个名为async 的库。 您可以使用异步并行代替 for 循环。 也有像 series 这样的helpers,以及针对不同需求的limit。

    【讨论】:

      猜你喜欢
      • 2017-06-02
      • 1970-01-01
      • 2021-12-27
      • 2016-08-07
      • 2020-10-10
      • 1970-01-01
      • 2019-11-13
      • 2014-07-30
      • 2017-06-01
      相关资源
      最近更新 更多