【问题标题】:How to execute a for loop one by one after getting response in javascript?在javascript中获得响应后如何逐个执行for循环?
【发布时间】:2016-08-09 16:15:34
【问题描述】:

JAVASCRIPT

for (var i=0; i<$scope.length; i++)
{
    var data = {
        page_no:i
    };
    newlocalitemService.list(data, function(res) { 
        $scope.data.push(res);
   });
}

newlocalitemService

list: function(data,success,error){
    $http({
        url: CONFIG.apiUrl + '/items',
        method: "GET",
        params: data
        }).success(success).error(error);
}

我在 for 循环中调用 API。得到响应后如何调用每个 API。这里 $scope.data 初始化为一个数组,API 是异步方法。

【问题讨论】:

  • 一个一个地执行一个for循环是什么意思?这就是 for 循环的作用。
  • 从哪里得到响应后?这个循环也被一次又一次地执行。
  • 我想你想要一个AJAX callback。我们需要了解您如何请求回复以帮助您解决此问题。
  • newlocalitemService.filter 是异步的吗?您是在问如何构建承诺,然后用结果填写 $scope.data?
  • 由于 $scope 不是数组,它真的有 length 属性吗? i 在外部 for 循环中的代码中有何作用?

标签: javascript angularjs arrays for-loop foreach


【解决方案1】:

某种在集合结束前调用自身的递归函数:

function doStuff(arr, idx) {
    if (idx <= (arr.length - 1)) {
        newlocalitemService.filter(arr[idx], function(res) { 
            $scope.data.push(res);
            doStuff(arr, ++idx);
        });
    }
}

doStuff($scope.data, 0);

【讨论】:

  • 如果 newlocalitemService.filter 是异步的,那将无法按预期工作。
  • @terpinmd -- 为什么不呢?假设 function(res) 是异步函数的回调 - 这应该可以正常工作
【解决方案2】:

一旦你检索到 AJAX 数据,你需要在回调函数中插入 for 循环,就像这样(在 JQuery 中):

var dataFromServer;  //declare the variable first

function getData() {
    $.ajax({
        url : 'example.com',
        type: 'GET',
        success : handleData(dataFromServer)
    })
}

function handleData(data) {
    alert(data);
    //insert your for loop here
    
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    相关资源
    最近更新 更多