var asyncIter = { [Symbol.asyncIterator]() { var items = ['h', 'e', 'l', 'l', 'o']; return { next() { return Promise.resolve({ done: items.length === 0, value: items.shift() }); } }; } }; (async function() { for await(let i of asyncIter) { console.log(i); } })();