Not sure I follow what you mean by "one yield per function". The following works, if that's what you mean:
var suspend = require('./'), fs = require('fs'); suspend(function* (resume) { // read the current file var res = yield fs.readFile(__filename, { encoding: 'utf8' }, resume); // replace tabs with spaces var newContents = res[1].replace(/\t/g, ' '); // write back changes yield fs.writeFile(__filename, newContents, resume); // print modified file var modified = yield fs.readFile(__filename, { encoding: 'utf8'}, resume); console.log(modified[1]); })(); This performs 3 asynchronous operations within the same generator. Nothing prohibits nesting, either (again, not entirely sure what you mean, but the following works as well): var suspend = require('./'), fs = require('fs'); var readCurrentFile = suspend(function* (resume, cb) { var res = yield fs.readFile(__filename, { encoding: 'utf8'}, resume); cb(null, res[1]); }); var writeToCurrentFile = suspend(function* (resume, data, cb) { yield fs.writeFile(__filename, data, resume); cb(null); }); suspend(function* (resume) { var res = yield readCurrentFile(resume); var newContents = res[1].replace(/\t/g, ' '); yield writeToCurrentFile(newContents, resume); var modified = yield readCurrentFile(resume); console.log(modified[1]); })(); Congrats on getting galaxy out, looking it over now! Curious about the fanciness you had to include in the `run` function. On Fri, May 31, 2013 at 2:56 AM, Bruno Jouhier <bjouh...@gmail.com> wrote: > Look like your start function only handles one yield per function. What if > you want to make several async calls from the same function? How do you > handle several levels of async calls (async f1 calling async f2 calling > async f3)? > > I just published a module that handles these cases ( > https://github.com/bjouhier/galaxy) but I had to use a much trickier > `run` function for this. > > Bruno > > > On Tuesday, May 28, 2013 4:20:06 PM UTC+2, jmar777 wrote: >> >> *suspend* <https://github.com/jmar777/suspend> is a new control flow >> library that exposes a minimal API around* ES6 generators*, and is >> expressly designed to work transparently with Node's existing callback >> conventions. This allows unobtrusive use of *yield* execution semantics >> that works seamlessly with existing Node code bases (no need to wrap >> everything in a promises/whatever layer). >> >> *Quick example:* >> * >> * >> var suspend = require('suspend'), >> fs = require('fs'); >> >> suspend(function* (resume) { >> var data = yield fs.readFile(__filename, resume); >> console.log(data[1].toString('**utf8')); >> })(); >> >> *Links:* GitHub Repo <https://github.com/jmar777/suspend> | Blog >> Announcement<http://devsmash.com/blog/suspend-generator-based-control-flow-for-node> >> >> *NPM: *$ npm install suspend >> >> *suspend* is extremely experimental, and I would greatly appreciate any >> feedback! >> > -- > -- > Job Board: http://jobs.nodejs.org/ > Posting guidelines: > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > You received this message because you are subscribed to the Google > Groups "nodejs" group. > To post to this group, send email to nodejs@googlegroups.com > To unsubscribe from this group, send email to > nodejs+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/nodejs?hl=en?hl=en > > --- > You received this message because you are subscribed to a topic in the > Google Groups "nodejs" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/nodejs/jfOq8mpaqss/unsubscribe?hl=en. > To unsubscribe from this group and all its topics, send an email to > nodejs+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- Jeremy Martin 661.312.3853 http://devsmash.com @jmar777 -- -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to nodejs@googlegroups.com To unsubscribe from this group, send email to nodejs+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en --- You received this message because you are subscribed to the Google Groups "nodejs" group. To unsubscribe from this group and stop receiving emails from it, send an email to nodejs+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.