map() переходит на новый тик до завершения предыдущего

Не могу понять как сделать выполнение кода последовательным ( в комментариях кода опишу на каком месте перебор с помощью map() начинает новый тик ) :

async function GetMusic(HTTPClient, ListMusic, callback) {
    try {

        let newList = [];

        for (let i = 0; i < ListMusic.length; i+= 10){
            newList.push(ListMusic.slice(i, i + 10));
        }

        await newList.map(async (task, index) =>
        {
            let ids = "";
            task.map((id) => {
                ids += id.body + ",";
            })

            await HTTPClient.request('al_audio.php', {
                act: 'reload_audio',
                al: 1,
                ids: ids.slice(0, -1)
            }).then((res) => {
    // На этом месте обработка массива начинается с самого начала и после всех тиков начинается обработка for
                    for (let i = (10 * index), c = 0; i < (10 * index) + res.payload[1][0].length; c++, i++) {
                        ListMusic[i].link = link.decode(res.payload[1][0][c][2], 541919523);
                    }
                })             
            })
        })

// Цель: выполнить код ниже стоящий только после того как выполнится код выше с учетом for
        if (ListMusic.length > 0) { return callback({item: ListMusic}) }
        else { return callback(undefined) }
    } catch { callback(undefined) }
}

Проблема была решена таким образом:

async function GetMusic(HTTPClient, ListMusic, callback) {
    try {

        let newList = [];

        for (let i = 0; i < ListMusic.length; i += 10) {
            newList.push(ListMusic.slice(i, i + 10));
        }

        await Promise.all(newList.map(async (task, index) => {
            let ids = "";
            task.map((id) => {
                ids += id.body + ",";
            })

            await HTTPClient.request('al_audio.php', {
                act: 'reload_audio',
                al: 1,
                ids: ids.slice(0, -1)
            }).then((res) => {
                for (let i = (10 * index), c = 0; i < (10 * index) + res.payload[1][0].length; c++, i++) {
                    ListMusic[i].link = decode(res.payload[1][0][c][2], HTTPClient._vk.session.user_id);
                }
            })
        }))
            .then(() => {
                if (ListMusic.length > 0) { return callback({ item: ListMusic }) }
                else { return callback(undefined) }
            })
    } catch { callback(undefined) }
}

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