Для большинства практических приложений, когда ты хочешь создать объект, который асинхронно генерирует последовательность значений, можно использовать асинхронный генератор. Синтаксис прост: добавь к функции звездочку и async. Это делает генератор асинхронным. Затем используй for await (...) для итерации по нему.