Javascript 角度测量中的Promise方法

Javascript 角度测量中的Promise方法,javascript,angularjs,Javascript,Angularjs,我试图为我的帖子创建一个延迟加载解决方案,请参见以下内容: $scope.loadMore = function() { if(hasRunBefore===0){ page+=1; } if($scope.postsCount > $scope.posts.length){ $http.get('/api/posts', {params: { page: page, pageSize: 10 }}) .then(function(res

我试图为我的帖子创建一个延迟加载解决方案,请参见以下内容:

$scope.loadMore = function() {

  if(hasRunBefore===0){
      page+=1;
  }

  if($scope.postsCount > $scope.posts.length){
      $http.get('/api/posts', {params: { page: page, pageSize: 10 }})
      .then(function(res){
          var morePosts = res.data.posts;
          if(morePosts && morePosts.length > 0){
              loadData(morePosts);
              page+=1;
              hasRunBefore+=1;
          }
      });
      }
  };

};

  var loadData = function(posts){
      $scope.posts = $scope.posts.concat(posts);
  };
一些注意事项:

$scope.postsunt是通过在Mongo中获取整个表的长度来获取的,在本例中,假设这是50 $scope.loadMore在任何人感兴趣的情况下,只要您到达前端无限滚动页面的末尾,就会被调用 $scope.loadMore可以多次调用,因为在到达页面末尾时会触发它 问题是-loadData是附加到$scope.posts的函数,因此if$scope.postscont>$scope.posts.length始终为true


问题-我不熟悉Angular 1.6.x中的promise方法,即:。然后。我需要如何重新构造它,以便等待loadData完成执行,以便if$scope.postscont>$scope.posts.length可以准确地显示

创建加载属性并在请求期间将其设置为true。如果再次调用load more函数,请检查loading属性

$scope.loading = false
$scope.loadMore = function() {

  if($scope.loading) return  // if page still loading dont allow
  $scope.loading = true


  if(hasRunBefore===0){
      page+=1;
  }


  if($scope.postsCount > $scope.posts.length){
      $http.get('/api/posts', {params: { page: page, pageSize: 10 }})
      .then(function(res){
          $scope.loading = false; // set loading as false after finish request
      });
      }
  };

};

我没有通读你所有的帖子,但我可以看到你缺少一个回调函数,在这里可以计算$scope.posts.length。答案很棒。简单而美丽。谢谢你,伙计。想把我的头撞到墙上,因为我没弄明白: