Из того, что я вижу из вашего кода, done
выглядит как асинхронный вызов. Поэтому функция, которую вы передаете ей, скорее всего, будет запущена после fav_bus += '</ul></div>
. Вот почему вы не видите изменения.
Если вы поместите console.log
внутри функции, которую вы передаете done
, и еще один console.log
сразу после вызова done
, вы, вероятно, увидите, что внешний console.log
будет запущен первым.
Чтобы решить эту проблему, любые последующие операции с fav_bus
должны выполняться внутри анонимной функции, которую вы передаете done
.
Кроме того, вы не можете ничего вернуть из асинхронной функции. Вот почему вам нужен обратный вызов, который будет работать с асинхронным результатом.
EDIT
Изменение кода на for..in
не должно ничего ломать, если вы явно не используете индекс цикла для чего-то. Вы должны быть в состоянии заставить его работать как есть со следующим изменением:
if (tipo == 'bus') {
favoritos = true;
fav_bus = '<div data-role="collapsible>' + '<h3>Parada ' + numero + '</h3>' + '<ul data-role="listview" data-inset="true" id="' + itemKey + '">';
pedirTiempos(numero).pipe(formatearTiempos).done(function (html) {
fav_bus += html + '</ul></div>';
// Ya tenemos los datos formateados
if (fav_bus != '') {
$('#contentFavoritos').append('<h3 style="text-align: center;">Paradas de Bus</h3>' + '<div data-role="collapsible-set">' + fav_bus + '</div>');
}
});
}