延迟循环调用API

时间:2018-06-25 19:22:17

标签: angularjs

我想在循环中每2秒调用一次API。我怎样才能做到这一点?

var letterArray = ['a', 'b', 'c'];
for (var j = 0; j < letterArray.length; j++) {
    $timeout(callApi(letterArray[j]), 2000);
}

function callApi(searchInput) {
    var request = {
        // 
        url: 'https://someApi/search?name=' + searchInput,
        method: 'GET',
        headers: {
            'Authorization': 'abc'
        }
    };
    $http(request).then(onComplete, onError);
}

1 个答案:

答案 0 :(得分:1)

使用$ interval代替$ timeout并删除该循环,使用变量进行跟踪。请记住在范围配置时配置和取消间隔。

var letterArray = ['a', 'b', 'c'];

var inr = $interval(function(){
    var search = letterArray.shift();
    if(!search && inr) {
          $interval.cancel(inr);
          inr = null;
    }
    callApi(search);
}, 2000);

function callApi(searchInput) {
    var request = {
        // 
        url: 'https://someApi/search?name=' + searchInput,
        method: 'GET',
        headers: {
            'Authorization': 'abc'
        }
    };
    $http(request).then(onComplete, onError);
}

请注意,您可能还想取消api或任何范围处置等异常的间隔。