Как зациклить функцию? Нужно повторять функцию (в принципе сгодится даже с теми же самыми аргументами), пока не получим необходимый результат. Вот кривой нерабочий код для примера, как то так оно выглядит в моеих влажных фантазиях. Подскажите, пожалуйста, как выпрямить?function a(callback){ // некая асинхронная функция с колбэком
setTimeout(function(){
var random = Math.random()
console.log(random);
callback(random);
}, 1000);
}
function b(lap){
// нужно выполнять a() до получения
// результата но не более 10 раз
a(function(r){
if(r<0.05 && lap<10) b(lap+1);
});
}
b(0); // поехали, круг - 0
// в итоге получаем только один цикл :(

21 Авг 2019 в 06:23
217 +1
0
Ответы
1

Вы можете создать замыкание (closure), чтобы хранить состояние количества выполненных кругов, и затем использовать цикл while для повторного выполнения функции a до получения нужного результата или достижения максимального количества кругов.

Вот пример исправленного кода:

function a(callback){ // некая асинхронная функция с колбэком
setTimeout(function(){
var random = Math.random();
console.log(random);
callback(random);
}, 1000);
}
function b(){
let lap = 0;
let result = (random) => {
if(random >= 0.05 || lap >= 10) return;
a(function(r){
lap++;
result(r);
});
}
result(null);
}
b(); // поехали, круг - 0

В этом коде мы используем замыкание для хранения значения переменной lap и функции result, которая вызывает себя же рекурсивно до тех пор, пока не будет получен результат больше либо равного 0.05 или пока количество кругов не достигнет 10.

20 Апр в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 093 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир