Async/await перезапуск основной функции

main - основная функция / get_ids - return id's / get_items - return items

let reset = false;

async function main(){

    let ids = await get_ids();
    
    for (let i = 0; i < ids.length; i += 50) {
        if(reset) break;
        let items = await get_items(ids.slice(i, i + 50));
    }
    
    if(reset){
        reset = false;
        main();
    }

}

main();

get_ids:

async function get_ids(){

    config.body = JSON.stringify({'action':'get_ids'});

    let response = await fetch(host, config);

    while (!response.ok) {
        response = await fetch(host, config);
    }

    let ids = await response.json();
    return ids.result;
}

get_items:

async function get_items(ids){

    config.body = JSON.stringify({'action': 'get_items', 'params': {'ids': ids}});

    let response = await fetch(host, config);

    while (!response.ok) {
        response = await fetch(host, config);
    }

    let items = await response.json();

    return items.result;
}

Click - Reset

let reset_button = document.querySelector('.reset');

reset_button.addEventListener('click', function(){
    reset = true;
});

Ответы (1 шт):

Автор решения: Evgeniy Leonidov

Не является ли ошибочкой присваивание true элементу DOM, а именно, кнопке с классом .reset. Или же я не правильно вас понял.

Если я правильно всё понял, то ваш код должен быть примерно такой:

let reset = false;

async function get_ids() {
    config.body = JSON.stringify({'action': 'get_ids'});
    let response = await fetch(host, config);
    while (!response.ok) {
        response = await fetch(host, config);
    }
    let ids = await response.json();
    return ids.result;
}

async function get_items(ids) {
    config.body = JSON.stringify({'action': 'get_items', 'params': {'ids': ids}});
    let response = await fetch(host, config);
    while (!response.ok) {
        response = await fetch(host, config);
    }
    let items = await response.json();
    return items.result;
}

async function main() {
    let ids = await get_ids();
    for (let i = 0; i < ids.length; i += 50) {
        if (reset) break;
        let items = await get_items(ids.slice(i, i + 50));
        
    }
    if (reset) {
        reset = false; 
        main(); 
    }
}


let resetButton = document.querySelector('.reset');
resetButton.addEventListener('click', function() {
    reset = true;
});

main();

После прерывания, если reset активен, он сбрасывается, и функция main тогда вызывается снова. Это даст реализовать перезапуск процесса без перезагрузки страницы

→ Ссылка