Итак, у меня есть эта функция, у которой время ожидания меняется каждые 3 с:
setActiveImage(promotions) {
for (let i = 0; i <= promotions.length - 1; i++) {
setTimeout(()=> {
this.activeImage = 'http://myrul/public/Commercials/' + promotions[i].commercial_file[0].file;
}, 3000*(i)); //CHANGE PICTURE EVERY 3s
}
}
Теперь я хочу изменить время (3000) на пользовательскую переменную, которую я получаю из promotions, Это рекламные акции:
![enter image description here](https://i.stack.imgur.com/CbKdG.png)
Так что у каждой фотографии или экземпляра i есть свое время.
Вот что я сделал :
for (let i = 0; i <= promotions.length - 1; i++) {
var x = promotions[i].time; //GET TIME
var y = +x; //TURN STRING TO NUMBER
var z = y * 1000; //TURN SECOND INTO MILISECONDS
var promoDisplayTime = z; //CUSTOM TIME
setTimeout(()=> {
this.activeImage = 'http://myurl/Commercials/' + promotions[i].commercial_file[0].file;
}, promoDisplayTime*(i));
}
Теоретически это должно работать, но таймер отключается. Первая картинка должна длиться 4 секунды, но длится 3 секунды. Второе изображение должно длиться 3 с, но длится 6 с. Третья картинка должна быть 10 с, но длится 4 с ...
Я не понимаю, что я делаю неправильно. Почему таймер выключен, хотя я отправляю правильную переменную promoDisplayTime .
StackBlitz с фиктивными данными: https://stackblitz.com/edit/angular-r6ejw9?file=src%2Fapp%2Fapp.component.html