Asynchronous iteration has landed in V8 6.3 , so we can have it in Node.js v9 at the end of the year.
There are some plans to implement a stream version based on this feature. Since node-eps seems to be archived, maybe it is worth to have an issue for this in the core repository.
Refs:
https://github.com/tc39/proposal-async-iteration
https://tc39.github.io/proposal-async-iteration/
https://bugs.chromium.org/p/v8/issues/detail?id=5855
https://ponyfoo.com/articles/javascript-asynchronous-iteration-proposal
http://2ality.com/2016/10/asynchronous-iteration.html
https://jakearchibald.com/2017/async-iterators-and-generators/
https://github.com/nodejs/CTC/issues/53
https://github.com/nodejs/readable-stream/issues/254
https://github.com/tc39/proposal-async-iteration/issues/74
https://github.com/nodejs/promises/issues/31 (and https://github.com/nodejs/promises/issues/31#issuecomment-323317862)
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.
--harmony_async_iteration
to get the feature.--harmony_async_iteration
.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.
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.
All versions of Node that do support async iteration requireedit: Node v10 and up has async iteration on by default, Node v8.3+ requires--harmony_async_iteration
to get the feature.--harmony_async_iteration
.Thank you Node team and V8 implementer Caitlin Potter. This is such a great improvement to JavaScript.