Учитывая, что твой код вроде не имеет проблем с асинхронностью, не вижу проблемы. Просто в самом начале скрипта вместо "todoData = []" напиши простую конструкцию вида...
let localTodo = localStorage.getItem('todoData');
let todoData = localTodo ? JSON.parse(localTodo) : [];
Сначала переменная localTodo попытается получить данные из локального хранилища. Если вернется хоть какое-то значение, данные будут преобразованы и записаны в переменную todoData, которая используется далее в цикле... иначе пустой массив, как у тебя написано изначально.