Assuming I have a Koa web server with an endpoint like this:
const perform = require(...); // some generator function exports.endpoint = function* () { var results = yield getResults(); // Respond the results this.body = results; } exports.getResults = function* () { var actions = [...]; var results = []; for (var action of actions) { var result = yield perform(action); results.push(results); } return results; }
Now the client will get the respond after ALL the actions are performed obviously. but the things is each action is dependent on the completion of the previous.
Is there a way to execute them in parallel?
Note: Turning them to Promises is not an option, unless I can somehow return the results, and not resolve() them.
Advertisement
Answer
co
turns the generator function to Promises, and executes them async. Promise.all
waits for all of them to finish:
exports.getResults = function* () { var actions = [...]; return yield Promise.all(actions.map(function(action) { return co(function*() { return yield perform(action); } })); }