当前位置: 首页 > 面试题库 >

使用$ http.get的`while`或`for`循环

方嘉志
2023-03-14
问题内容

我想知道是否可以使用whilefor嵌套调用$http.get

这是一个例子:

for (var i = 0; i < $scope.comments.length; i++) {
   alert($scope.comments[i].id); // = 2
   $http.get('/api/logged/like/isliked?id=' + $scope.comments[i].id).success(function(data, status, header, config) {
        alert('Test');
        alert($scope.comments[i].id); // Not executed.
   }).error(function(data){alert('The requeste isn't working');}); }

我放了两个alerts来显示我用来检索JSON的评论的ID。我收到第一个警报的ID,然后是第二个的“测试”,但没有显示第三个警报。为什么不?

这是JSON的示例:

{data":[
   {"id":2,"is_liked":false,"nb_comments":1,"nb_likes":1,
    "date_creation":"2014-05-26T17:03:54+0000"},
   {"id":1,"is_liked":true,"nb_comments":0,"nb_likes":1,
    "date_creation":"2014-05-26T17:00:26+0000"}
]}

问题答案:

问题:

不要在循环内创建函数 …

函数的每次调用实际上都引用i内存中的相同副本。每次for循环运行时都会创建一个新的闭包,但是每个闭包都捕获相同的环境。因此,对$http.get(异步函数)的每次调用都会导致调用一个回调,该回调引用从循环结束开始引用的相同
最终i

一个办法:

传递i作为参数来单独定义的函数:

var getIsLiked = function(i){
  $http.get('isliked.json' + $scope.comments[i].id)
    .success(function(data) {
      console.log('Test');
      console.log('i is ', i);
      console.log($scope.comments[i].id);
  }).error(function(data){console.log("The request isn't working");}); }
}

for (var i = 0; i < $scope.comments.length; i++) {
  getIsLiked(i);
}

演示版

这可能很难使您的头脑转转,但是值得花时间来深入了解。它不仅可以帮助您避免将来出现类似的问题,而且还可以使您更好地了解闭包(JavaScript中的重要概念)。



 类似资料:
  • 我们经常需要重复执行一些操作。 例如,我们需要将列表中的商品逐个输出,或者运行相同的代码将数字 1 到 10 逐个输出。 循环 是一种重复运行同一代码的方法。 “while” 循环 while 循环的语法如下: while (condition) { // 代码 // 所谓的“循环体” } 当 condition 为真时,执行循环体的 code。 例如,以下将循环输出当 i < 3 时的

  • 问题内容: 我也在学习Java和android。我们可以在while循环中执行的几乎所有事情都可以在while循环中执行。 我发现一个简单的条件,使用while循环比for循环更好 如果我必须在程序中使用counter的值,那么我认为while循环要比for循环好 使用while循环 在这种情况下,我发现while循环要比for循环好,因为如果要在for循环中实现相同的效果,则必须将counter

  • 本文向大家介绍C#中循环语句:while、for、foreach的使用,包括了C#中循环语句:while、for、foreach的使用的使用技巧和注意事项,需要的朋友参考一下 循环结构可以实现一个程序模块的重复执行,它对于我们简化程序,更好地组织算法有着重要的意义。C#为我们提供了若干种循环语句,分别适用于不同的情形,下面依次介绍。 C#中循环语句:while、for、foreach   1、wh

  • 主要内容:while语句的实现,for语句Erlang是一个函数式编程语言,是需要记住所有函数的编程语言,它们不提供任何的循环结构。而函数式编程取决于一个概念叫做递归。 while语句的实现 由于在 Erlang 中没有可直接使用的 while 语句,就必须使用递归技术在 Erlang 中来实现 while 语句。 我们将努力遵循 while 循环的实现,如在其他编程语言中一样。以下是遵守一个流程: 让我们来看看如何使用递归来在 Erla

  • 关于如何使用for和while循环将值列表到空列表,我有两种方法。 例1。创建一个函数,该函数接受用户的输入,并在列表中列出十进制正值,直到用户插入负值。然后清单结束,最后一个值应该是这个负值。输出应该是什么样子的: 在列表中添加数字:1.5在列表中添加数字:5.2在列表中添加数字:6在列表中添加数字:-2列表:[1.5,5.2,6.0,-2.0] 我的选拔赛没成功 示例2关于将for循环和ran

  • 本文向大家介绍浅谈php中的循环while、do...while、for、foreach四种循环,包括了浅谈php中的循环while、do...while、for、foreach四种循环的使用技巧和注意事项,需要的朋友参考一下 php中的while循环,循环执行代码块制定的次数,或者当指定的条件为真时循环执行代码块。 ----------------------------------------