romasovest
@romasovest
~

Как зациклить функцию?

Нужно повторять функцию (в принципе сгодится даже с теми же самыми аргументами), пока не получим необходимый результат. Вот кривой нерабочий код для примера, как то так оно выглядит в моеих влажных фантазиях. Подскажите, пожалуйста, как выпрямить?

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

// в итоге получаем только один цикл :(
  • Вопрос задан
  • 945 просмотров
Решения вопроса 1
romasovest
@romasovest Автор вопроса
~
Оу друзья, вопрос закрыт у меня ошибка в if(r<0.05 && lap<10), я неверно искал условие. Прошу прощения за флуд) Если кому-то пригодится (видел тут вопросы по рекурсиям), то вот рабочий вариант

function a(callback){ // некая асинхронная функция с колбэком
	setTimeout(function(){
		var random = Math.random()
		console.log(random);
		callback(random);
	}, 1000);
}

(function b(lap=0){ 
	// нужно выполнять a() пока не 
	// получим <0.05 но не более 10 раз
	a(function(r){ 
		if(r>0.05 && lap<10) b(lap+1);
	});
})(); // поехали
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
if(r<0.05 && lap<10) b(lap+1);
У вас 5% шанс, что результат не получится с первого раза. Поэтому почти всегда только один цикл.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы