Reputation: 232
I am using angular $timeout as,
$scope.alltexts = ["hii" , "hello" , "hehe"]
var sendtime = 60000
for (var i = 0; i < $scope.alltexts.length; i++) {
var text = $scope.alltexts[i]
$setTimeout(function() {}, (function(){$scope.addtext(text)}, sendtime + (i * 60000)));
};
$scope.addtext = function(text){
console.log(text)
}
But after each one minute it only console "hehe". Means it considers only last value. Please let me know how should I get proper results.
Upvotes: 3
Views: 295
Reputation: 3118
Try this
$scope.alltexts = ["hii" , "hello" , "hehe"]
var sendtime = 60000
for (var i = 0; i < $scope.alltexts.length; i++) {
(function(i){
var text = $scope.alltexts[i]
$setTimeout(function() {}, (function(){$scope.addtext(text)}, sendtime + (i * 60000)));
})(i)
};
$scope.addtext = function(text){
console.log(text)
}
Upvotes: 1
Reputation: 23632
Too much of closures
today, you are always passing the last index... a closure
will create a new scope
for each iteration.
$scope.alltexts = ["hii" , "hello" , "hehe"]
var sendtime = 60000
for (var i = 0; i < $scope.alltexts.length; i++) {
(function(i){
var text = $scope.alltexts[i]
$setTimeout(function() {}, (function(){$scope.addtext(text)}, sendtime + (i * 60000)));
})(i)
};
$scope.addtext = function(text){
console.log(text)
}
Upvotes: 2