Generators and Iterators in JavaScript: Lazy Data and Async Flows