Я пытаюсь установить интервал между каждым элементом JSON. Этот JSON напечатает на странице некоторые твиты, взятые из конечной точки API.
Проблема в том, что нижняя функция не работает. По некоторым причинам он ждет количество времени, которое я объявлял в функции синхронизации, но после того, как он ждал, он печатает последний твит в JSON вместо того, чтобы печатать их один за другим с объявленным интервалом.
Я пробовал с setTimeout
и setInterval
без везения.
Цель состоит в том, чтобы показать твиты каждые TOT секунд от ответа JSON.
Вот конечная точка API: xxxx/tweets.php
Вот моя функция:
function tweets() {
$.when(getData(tweetsEndpoint)).done(function(json) {
$.each(json.twitter, function(k, v) {
$.each(v, function() {
setTimeout(function() {
tweetId = v.id;
tweetName = v.nom;
tweetUser = v.lien_twitter;
tweetImg = v.image;
tweetDate = v.date;
tweet = v.twitt;
tweetAuthor = v.author_type;
if (tweetAuthor === 'user') {
console.log('user');
$('#p31_bubble_right').html('');
obj = $('#p31_bubble_right').append(makeTweet(k, tweetUser, tweetAuthor, tweet));
obj.fitText(7.4);
$('#p31_bubble_left').html('');
} else {
$('#p31_bubble_left').html('');
obj = $('#p31_bubble_left').append(makeTweet(k, tweetUser, tweetAuthor, tweet));
obj.fitText(7.4);
$('#p31_bubble_right').html('');
console.log('operator');
}
}, tweetSwitcher);
});
});
});
}
$.each(json.twitter, function(k, v) {
$.each(v, function() {
// ^---- You need to use the index,element arguments
setTimeout(function() {
tweetId = v.id;
Вы не проходите через v
во второй $.each
, или, по крайней мере, вы по-прежнему обращаетесь к массиву v
а не к отдельному элементу.
EDIT Просто посмотрел ответ от вашего API.
Я думаю, у вас слишком много $.each
. Удалите второй. v
не является массивом объектов, это объект, за которым вы находитесь.
$.each(json.twitter, function(index,element){
setTimeout(function(){
console.log(element.twitt);
}, tweetSwitcher * index);
});