index.js 598 B

123456789101112131415161718192021222324252627282930313233343536
  1. /*!
  2. * co-gather - index.js
  3. * Copyright(c) 2014 dead_horse <dead_horse@qq.com>
  4. * MIT Licensed
  5. */
  6. 'use strict';
  7. /**
  8. * Module dependencies.
  9. */
  10. var thread = require('co-thread');
  11. module.exports = function *gather(thunks, n){
  12. n = Math.min(n || 5, thunks.length);
  13. var ret = [];
  14. var index = 0;
  15. function *next() {
  16. var i = index++;
  17. ret[i] = {isError: false};
  18. try {
  19. ret[i].value = yield thunks[i];
  20. } catch (err) {
  21. ret[i].error = err;
  22. ret[i].isError = true;
  23. }
  24. if (index < thunks.length) yield next;
  25. }
  26. yield thread(next, n);
  27. return ret;
  28. };