setImmediate for the co generator framework
Calling setImmediate in a co-friendly way is painful and you have to launch co() in your setImmediate function. This is a simple wrapper.
This module is installed via npm:
$ npm install co-spawn
var spawn = require('co-spawn');
co(function *() {
var c = { counter: 0 };
// this will run first
c.counter++;
// put the following code into another turn of the event loop
spawn(function *() {
yield finish(c, done);
});
// this will run second
c.counter++;
})();
function *finish(c, cb) {
// this will run last
c.counter++;
expect(c.counter).to.equal(3);
done();
}
If for some reason you want to block on the spawn, just yield:
var spawn = require('co-spawn');
co(function *() {
var c = { counter: 0 };
// this will run 1st
c.counter++;
// put the following code into another turn of the event loop, but block
yield spawn(function *() {
yield finish(c, done);
});
// this will run last
c.counter++;
})();
function *finish(c, cb) {
// this will run 2nd
c.counter++;
expect(c.counter).to.equal(2);
done();
}