There is an excellent article on promisejs.org detailing how to combine promises with generators to achieve much cleaner code. Instead of the async function the article proposes, you can use Promise.coroutine.

This article is partially or completely unfinished. You are welcome to create pull requests to help completing this article.