Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
vsemozhetbyt opened this issue Oct 1, 2017 · 9 comments
Closed
Labels
discuss Issues opened for discussions and feedbacks. feature request Issues that request new features to be added to Node.js. promises Issues and PRs related to ECMAScript promises. readline Issues and PRs related to the built-in readline module. stream Issues and PRs related to the stream subsystem.

Comments

@vsemozhetbyt
Copy link
Contributor

vsemozhetbyt commented Oct 1, 2017

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/

nodejs/CTC#53
nodejs/readable-stream#254
tc39/proposal-async-iteration#74
nodejs/promises#31 (and nodejs/promises#31 (comment))

https://github.com/calvinmetcalf/async-iter-stream

@vsemozhetbyt vsemozhetbyt added discuss Issues opened for discussions and feedbacks. feature request Issues that request new features to be added to Node.js. promises Issues and PRs related to ECMAScript promises. readline Issues and PRs related to the built-in readline module. refactor to ES6+ stream Issues and PRs related to the stream subsystem. labels Oct 1, 2017
@vsemozhetbyt
Copy link
Contributor Author

vsemozhetbyt commented Oct 1, 2017

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.

@vsemozhetbyt vsemozhetbyt changed the title Traking bug and discussion for asynchronous iteration in Node.js core Tracking bug and discussion for asynchronous iteration in Node.js core Oct 1, 2017
@Fishrock123
Copy link
Contributor

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

@benjamingr
Copy link
Member

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.

@calvinmetcalf
Copy link
Contributor

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.

@mcollina
Copy link
Member

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.

@benjamingr
Copy link
Member

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

@mcollina
Copy link
Member

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

@jasnell
Copy link
Member

jasnell commented Dec 18, 2017

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.

apapirovski pushed a commit to apapirovski/node that referenced this issue Dec 19, 2017
Adds support for Symbol.asyncIterator into the Readable class.

Fixes: nodejs#15709
mcollina added a commit to mcollina/node that referenced this issue Jan 11, 2018
Adds support for Symbol.asyncIterator into the Readable class.
The stream is destroyed when the loop terminates with break or throw.

Fixes: nodejs#15709
@rektide
Copy link

rektide commented Mar 2, 2018

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
discuss Issues opened for discussions and feedbacks. feature request Issues that request new features to be added to Node.js. promises Issues and PRs related to ECMAScript promises. readline Issues and PRs related to the built-in readline module. stream Issues and PRs related to the stream subsystem.
Projects
None yet
Development

No branches or pull requests

7 participants