AngularJS $ interval或$ timeout

时间:2016-10-13 20:47:23

标签: angularjs

我使用AngularJS和Elasticsearch构建了一个小型搜索应用程序(电影)。在测试中,我意识到我忘记了在事情花费的时间超过计划时添加超时,但是我无法让它工作。我实际上决定使用$ interval而不是$ timeout,因为它似乎更好,因为它仍然可以获得结果,而不是在需要更长时间时停止进程。

这是我的代码:

    vm.search = function() {
    vm.currentPage = 1;
    vm.results.documents = [];
    vm.isSearching = true;
    $state.go('search');
    return searchService.search(vm.searchTerms, vm.currentPage).then(function(es_return) {      
      var totalItems = es_return.hits.total;
      var totalTime = es_return.took;
      var numPages = Math.ceil(es_return.hits.total / vm.itemsPerPage);
      vm.results.pagination = [];
      for (var i = 1; i <= 100; i++) {
        vm.results.totalItems = totalItems;
        vm.results.queryTime = totalTime;

        vm.results.pagination = searchService.formatResults(es_return.hits.hits);//load all results
        vm.results.documents = vm.results.pagination.slice(vm.currentPage, vm.itemsPerPage);
        } 
          vm.noResults = true;
        }
    ),
    function(error){
      console.log('ERROR: ', error.message);
      vm.isSearching = false;
    }
  };

我正在试图找出放在哪里

if(totalItems > 0) {
  $interval(function(){
    vm.isSearching = true;
  }, 2000);

在那里。

我已经尝试将它放入for循环但没有快乐:(

1 个答案:

答案 0 :(得分:0)

您可以进一步链接承诺并从$q生成延迟(TypeScript:$ q:IQService)并在一定时间后拒绝它并显示拒绝消息。

var defer = $q.defer();

并在某处返回defer.promise

SearchService.$inject = ["$q", "$http"]
function SearchService($q, $http) {
    var defaultWaitUntilTimeout = 2000;
    this.search = function (param, param2, waitUntilTimeout) {
        var defer = $q.defer();

        $http().get().then(function (result) { defer.resolve(result);})

        $timeout(function () { defer.reject();}, waitUntilTimeout || defaultWaitUntilTimeout); // now the rejection function of the promise will get called

        return defer.promise;
    }
}

我希望你明白这个想法