infinum/action-chainer

View on GitHub
index.js

Summary

Maintainability
A
0 mins
Test Coverage
module.exports = function chainer(options) {
  var config = {
    reducer: options && options.reducer,
    argsTransformer: options && options.argsTransformer
  };
  var request = Promise.resolve().then(config.reducer);

  return {
    chain: function chain(func, args, ctx) {
      var chainRequest = request.then(function executeChain(state) {
        var opts = config.argsTransformer ? config.argsTransformer(args, state) : args;
        return func.apply(ctx, opts);
      });
      request = chainRequest.then(config.reducer);
      return chainRequest;
    }
  };
};