flow.js 756 B

123456789101112131415161718192021222324252627
  1. var _ = require("./_");
  2. var genIterator = require("./genIterator");
  3. var isPromise = require("./isPromise");
  4. module.exports = function (iterable) {
  5. var iter = genIterator(iterable);
  6. return function (val) {
  7. function run (pre) {
  8. return pre.then(function (val) {
  9. var task = iter.next(val);
  10. if (task.done) {
  11. return val;
  12. }
  13. var curr = task.value;
  14. return run(
  15. isPromise(curr) ? curr :
  16. _.isFunction(curr) ? _.Promise.resolve(curr(val)) :
  17. _.Promise.resolve(curr)
  18. );
  19. });
  20. }
  21. return run(_.Promise.resolve(val));
  22. };
  23. };