Проблема возникает потому, что вы используете функцию setTimeout внутри цикла, и каждый вызов setTimeout выполняется после завершения текущей итерации цикла. Когда цикл завершает свою работу, data принимает значение последнего элемента массива datat, и все асинхронные функции setTimeout захватывают это последнее значение.