После вызова асинхронной функции asyncFunc(test) нужно завершить работу функции и не обрабатывать остальные элементы массива data. А по факту вызывается сначала несколько раз функция asyncFunc и только потом return;
Дело не в том, что функция асинхронная (хотя и это тоже), а в том, что forEach не предназначен для такого использования, которые вы описываете. Используйте обычный цикл for и async/await.