我想为我的数组中的每个项目执行一个函数,但它只触发数组中的最后一项,我不确定如何修复它:
$scope.PlayMovie =function(){
angular.forEach($scope.CamArr, function(value, index){
$timeout($pyx.globe.camera(value.cam, 3000), 5000);
});
};
设置地球仪相机需要一个相机对象和一个时间。因此,移动到该位置需要3秒钟。我把它放在一个时间,所以它会在到达该位置后等待2秒然后移动到下一个位置。这似乎只是抓住了我的数组中的最后一个索引。我已经要求在添加相机对象并且对象进入阵列时显示计数,因此我不确定我在这里做错了什么。
点击按钮即可调用播放电影。
提前感谢您的帮助。如果您需要更多信息,请与我们联系。
答案 0 :(得分:1)
所以,有两件事正在发生:
这是由forEach循环立即评估的,并且您为该函数的返回值设置了超时:
$pyx.globe.camera(value.cam, 3000)
你可能想做
$timeout(function() { $pyx.globe.camera(value.cam, 3000) }, 5000);
你的foreach循环正在设置几个超时,从现在起5秒内都会激活。听起来你想立刻(在0秒内),然后从现在开始一个5秒,然后从现在开始10秒,等等。尝试将延迟乘以索引(0,1,2,3等),像这样:
$scope.PlayMovie = function() {
angular.forEach($scope.CamArr, function(value, index){
$timeout(function() { $pyx.globe.camera(value.cam, 3000) }, index * 5000);
});
};
答案 1 :(得分:0)
每次循环都会分配相同的值,所以你自然会得到一个只有循环中最后一个值的调用。通过这样做来修复它:
$scope.PlayMovie =function(){
var timeoutArray = [];
angular.forEach($scope.CamArr, function(value, index){
timeoutArray.push($timeout($pyx.globe.camera(value.cam, 3000), 5000));
});
};
这应该每次都给你一个不同的超时,如果你需要取消一个或多个,可以单独引用它们。