Я пытаюсь запускать некоторые функции одну за другой, используя Promises, но почему-то вторая функция либо выполняется раньше первой, либо не выполняется вообще.Ситуация такова:
У меня есть следующие функции:
- Функция, которая загружает HTML-код многократного использования из папки Partials:
function insertingPartials() {
return new Promise( function(resolve,reject) {
$('#navbar-placeholder').load('/Assets/Partials/navbar.html');
$('#jumbotron-placeholder').load('/Assets/Partials/jumbotron.html');
$('#footer-placeholder').load('/Assets/Partials/footer.html');
resolve();
reject('Error');
});
- Тот, который выполняет языковые настройки
function languageSpecifics() {
return new Promise( function(resolve,reject) {
//showing correct text per html language
$('span[lang=' + $('html')[0].lang + ']').show();
$('div[lang=' + $('html')[0].lang + ']').show();
//disabling the current language from the language selection menu
$('a[lang=' + $('html')[0].lang + ']').addClass('disabled');
//links dynamically point to the correct sub-pages
$('.blog-link').attr('href', '/' + $('html')[0].lang + '/Blog/');
$('.prod-link').attr('href', '/' + $('html')[0].lang + '/' + $('.prod-link span[lang=' + $('html')[0].lang + ']').text() + '/');
$('#en').attr('href', window.location.href.replace($('html')[0].lang, 'en'));
$('#es').attr('href', window.location.href.replace($('html')[0].lang, 'es'));
$('#ro').attr('href', window.location.href.replace($('html')[0].lang, 'ro'));
resolve();
reject('Error in ' + arguments.callee.name);
});
}
- Тот, который отображает содержимое:
function loadContent() {
return new Promise( function(resolve,reject) {
//fading content in
$('nav').animate({top: '0'});
$('footer').animate({bottom: '0'});
$('.main-content').animate({right: '0'}).css('overflow', 'auto');
//fading preloading out
$('.spinner-border').fadeOut();
$('#preloading').removeClass('d-flex').addClass('d-none');
resolve();
reject('Error in ' + arguments.callee.name);
});
}
- и тот, которыйрегулирует высоту контейнера
function setContainerHeight() {
//setting the height of the container
$('.container').css('height', $('body').height() - ($('nav').height() + $('footer').height()) + 'px');
}
Я пытаюсь сделать так, чтобы функции выполнялись в том порядке, в котором я их разместил выше.Приведенный ниже код выводит 1,2,3,4, но функция «languageSpecifics» не выполняется или выполняется до «insertPartials», потому что загружаются частичные компоненты, а затем компоненты передвигаются в поле зрения, но текст не может быть виден, и при этомссылки указывают куда угодно.
$(document).ready( function() {
console.log('1')
insertingPartials().then( function() {
console.log('2');
languageSpecifics().then( function() {
console.log('3');
loadContent().then( function() {
console.log('4');
setContainerHeight();
});
});
});
});
Если я выполняю функции отдельно в консоли браузера, я получаю желаемый результат, и каждое возвращаемое обещание выполняется.Если я запускаю их с помощью .then (), обещание возвращается в ожидании, и я не получаю никакого текста на странице.(оба вложенные ".then (.then ()) и один и тот же уровень" .then (). then () "дают одинаковые результаты)
Я хотел бы знать, что я делаю здесь неправильно.Также, если есть лучший / более эффективный способ достижения того, что я пытаюсь сделать здесь, пожалуйста, сообщите.