gpt4 book ai didi

javascript - `while` 或 `for` 与 $http.get 循环

转载 作者:可可西里 更新时间:2023-11-01 01:46:47 24 4
gpt4 key购买 nike

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

这是一个例子:

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');}); }

我放置了两个 alert 来显示我用来检索 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"}
]}

最佳答案

问题:

Don't make functions inside of a loop ...

您的函数的每次调用实际上都在引用内存中 i 的相同副本。每次 for 循环运行时都会创建一个新的闭包,但每个闭包都捕获相同的环境。因此,每次调用 $http.get(异步函数)都会触发一个回调,该回调引用来自 i 的相同 final 值循环结束。

解决方案:

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);
}

Demo

这可能真的很难让您全神贯注,但值得花时间深入理解。它不仅可以帮助您避免以后出现类似问题,还可以让您更好地理解闭包这一 JavaScript 中的重要概念。

关于javascript - `while` 或 `for` 与 $http.get 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23922301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com