Node: Tracking bug and discussion for asynchronous iteration in Node.js core

Created on 1 Oct 2017  路  9Comments  路  Source: nodejs/node

Most helpful comment

Hey. I want to chip in for any Node.js users like myself, playing along at home, about how to use async generators in Node.js: that information was a little scattered, and I wasn't sure what the status was myself.

  • Node versions 8.3 and above seem to have async iteration support! (Wow! That's way more support than I thought!)
  • All versions of Node that do support async iteration require --harmony_async_iteration to get the feature. edit: Node v10 and up has async iteration on by default, Node v8.3+ requires --harmony_async_iteration.
  • I tested with this sample script:
async function * answers(){
    yield Promise.resolve(42);
};
(async function universe(){
    for await (var answer of answers()){
        console.log(answer)
    }
})()

Thank you Node team and V8 implementer Caitlin Potter. This is such a great improvement to JavaScript.

All 9 comments

Personally, I would look forward to a core way to read and process big files line by line in async/await functions without complicated Promise chains in event callbacks.

I understand this is not the main purpose of streams, but everybody loves fs or http anyway, so this is just a reminder to not forget readline.

I'm not _super_ familiar with async iterators but this seems like something we'd definitely want to investigate further.

AsyncIterator landed in Chrome and V9 will likely ship support. @nodejs/streams @nodejs/collaborators

I would love it if this issue made it to TSC agenda and discussed at the next meeting - I think adding experimental Symbol.asyncIterator support to streams behind a flag while explaining they don't perform as well as streams at the moment might be a good idea.

I don't know if I'll have time for a pull request but if somebody wants to use the module I wrote as the basis for adding them to streams you have my permission to do so without worrying about the license.

I don't think that placing them under a flag is helpful. I would just emit an experimental warning when using them for the first time.

@mcollina you're right, an experimental morning should be sufficient.

I'm working on an implementation of this, and it is not clear when asyncIterator.throw(e)聽 is called.

I've been playing with this a little bit in the fs promises implementation, specifically in a promise-based readFile() implementation and I have to say that using the async iterator works rather well. I'll be pushing the code up to a branch a bit later today.

Hey. I want to chip in for any Node.js users like myself, playing along at home, about how to use async generators in Node.js: that information was a little scattered, and I wasn't sure what the status was myself.

  • Node versions 8.3 and above seem to have async iteration support! (Wow! That's way more support than I thought!)
  • All versions of Node that do support async iteration require --harmony_async_iteration to get the feature. edit: Node v10 and up has async iteration on by default, Node v8.3+ requires --harmony_async_iteration.
  • I tested with this sample script:
async function * answers(){
    yield Promise.resolve(42);
};
(async function universe(){
    for await (var answer of answers()){
        console.log(answer)
    }
})()

Thank you Node team and V8 implementer Caitlin Potter. This is such a great improvement to JavaScript.

Was this page helpful?
0 / 5 - 0 ratings