JavaScript извлекает внутренний цикл в onSubmit

#javascript #jquery

Вопрос:

Как я могу организовать свой код, который console.log(url) вызывает цикл после each цикла?

 $("form").on('submit', (e) => {
    e.preventDefault();
    
    const form = $("form");
    if (!form.checkValidity()) return;
    
    const formData = new FormData(form[0]);

    $(".file-upload-wrapper img.card-img").each(async function (i) {
        
        const src = $(this).attr("src");
        const fileName = $(this).attr("data-filename");

        const response = await fetch(src);
        const data = await response.blob();
        formData.append("file", data, fileName);
        
        console.log(src);   
    })

    const url = $(form).attr("action");
    console.log(url);    
})
 

Комментарии:

1. оберните URL-адрес журнала консоли в функцию внутри вашего при отправке и вызовите ее в каждом цикле. или поместите URL-адрес журнала консоли в сам цикл, и то, и другое будет работать, зависит только от того, что вы хотите

Ответ №1:

await работает внутри for..of циклов, а не внутри методов синхронного массива, таких как .forEach() и .map() . Я подозреваю , что это также не работает внутри jQuery $.each() , потому что работает только внутренняя функция async ; внешний код остается синхронным, так что вы получаете свой последний console.log(url) , прежде чем что-либо еще. Попробуйте for...of вместо этого использовать петлю:

 $("form").on('submit', async (e) => { // async here
    e.preventDefault();
    
    const form = $("form");
    if (!form.checkValidity()) return;
    
    const formData = new FormData(form[0]);

    const $images = $(".file-upload-wrapper img.card-img");
    
    for (let image of $images) {
        const $image = $(image);
        const src = $image.attr("src");
        const fileName = $image.attr("data-filename");
    
        const response = await fetch(src);
        const data = await response.blob();
        formData.append("file", data, fileName);
        
        console.log(src);   
    }

    const url = $(form).attr("action");
    console.log(url);    
});
 

Комментарии:

1. Я был бы рад узнать, почему кто-то отклонил мой ответ. Что я сделал не так? Почему вы думаете, что этот ответ неверен? Это было бы более конструктивно и более полезно, чем просто отказаться от молчаливого голоса и отправиться в путь.