async.js 926 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. var Promise = require("./_").Promise;
  2. var tryErr = {};
  3. function tryCatch (step, key) {
  4. try {
  5. return step(key);
  6. } catch (err) {
  7. tryErr.err = err;
  8. return tryErr;
  9. }
  10. }
  11. module.exports = function (generator) {
  12. return function () {
  13. var gen = generator.apply(this, arguments);
  14. function genNext (val) {
  15. return step("next", val);
  16. }
  17. function genThrow (val) {
  18. return step("throw", val);
  19. }
  20. function step (key, val) {
  21. var info = gen[key](val);
  22. if (info.done) {
  23. return Promise.resolve(info.value);
  24. } else {
  25. return Promise.resolve(info.value).then(genNext, genThrow);
  26. }
  27. }
  28. var ret = tryCatch(step, "next");
  29. if (ret === tryErr)
  30. return Promise.reject(ret.err);
  31. else
  32. return ret;
  33. };
  34. };