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

21 Авг 2019 в 06:23
285 +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 Апр 2024 в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир