Вы почти у цели. Я вижу, что вы понимаете, что рекурсивный вызов setTimeout
эмулирует некоторое время l oop асинхронно. И я вижу, что вы понимаете, как решить, когда продолжать «l oop», а когда останавливаться:
if (--n) whileLoop(n);
Вам просто нужно понять, что l oop заканчивается, когда if
условие ложное. Таким образом, чтобы запустить второе время, пока l oop просто запустите его в else
:
if (--n) {
whileLoop(n);
}
else {
whileLoop2(1,6);
}
Есть несколько последствий этого:
Второе whileLoop
должен быть переписан в НЕ быть IIFE - это должна быть обычная функция, вызываемая в конце первого whileLoop
, как указано выше.
Вы не можете повторно использовать имя whileLoop
для обеих функций. Чтобы дифференцировать функции, вы должны переименовать либо первую, либо вторую функции «l oop».
При этом сохраняется ваш текущий лог c, требующий изменения только 4 строк, чтобы получить поведение, которое вы хотите.