Есть такой код JS:
var first = "";
var second = "";
init_vars();
dosomething(first, second);
2 пустые переменные. Функция init_vars();
вносит в них значения.
Затем эти значения передаются в функцию dosomething(first, second)
.
Основной код конечно не такой, но смысл такой же.
У меня получается что при выполнении переменные остаются пустыми и в функцию dosomething(first, second);
они пустыми и попадают.
Если сделать тоже самое в цикле, в первый раз в функцию dosomething(first, second);
попадут пустые переменные, но на второй раз в них уже будет информация.
Мой вопрос таков : Как мне добиться "правильной" последовательности исполнения?
Чтобы сначала выполнилась функция init_vars();
, данные внеслись в переменные. А уж потом выполнилась функция dosomething(first, second);
Этого уже добились:
var first = "";
var second = "";
init_vars();
for (var i = 0; i < 3; i++) {
dosomething(first, second);
}
function init_vars() {
first = "One";
init_vars2();
}
function init_vars2() {
second = "Two";
}
function dosomething(first, second) {
console.log(first, second);
}
при первом исполнении цикла ...
Я не вижу в вопросе никакого "цикла".
Есть вариант с проверками через setTimeout, если по какой-то причине изменение значений переменных от вас не зависит:
var first;
var second;
async_init_vars();
var attempts = 0;
setTimeout(function bubu(){
if( ++attempts > 50 ) {
// Если уже было много попыток, но значения так и не прилетели - пора остановиться.
return console.log("Не дождались переменных first | second");
}
if( typeof first == "undefined" || typeof second == "undefined" ){
// Если любая из переменных оказывается undefined, повторяем попытку чуть позже
console.log("Переменные еще не готовы!");
setTimeout(bubu, 200);
} else {
// Иначе запускаем основную функцию
doSomething(first, second);
}
}, 200);
/******/
function async_init_vars(){
setTimeout(function asyncExample(){
first = "bubu-1";
second = "bubu-2";
}, 1000);
}
function doSomething(a, b){
console.log(a, b);
}
Даже если это у вас сработает (а оно сработает), всё равно костыльненько... Нужно посмотреть код init_vars, и в нем что-то поменять.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
делаю многоуровневое меню (три уровня), столкнулся с проблемой, что у крайних пунктов, меню вторых третьих уровней выходят за зону видимости...
Использую вот такую систему смены стилей по кнопкеОднако не все элементы меняют стили