UNPKG

datafire

Version:

[![Travis][travis-image]][travis-link] [![Downloads][downloads-image]][npm-link] [![NPM version][npm-image]][npm-link] [![license](https://img.shields.io/badge/license-MIT-blue.svg)](https://www.npmjs.com/package/datafire) <!--[![Dependency status][deps-i

39 lines (35 loc) 1.08 kB
let getParameterNames = require('@captemulation/get-parameter-names'); let Context = require('./context'); /** * Returns a Promise. Each time .then() is called on the resulting * promise, the flow will record the result in 'context'. * * @param {Context} context */ let Flow = module.exports = function(context) { context = context || new Context(); let nextResultIdx = -1; let results = {}; function wrapPromise(promise, resultName) { let then = promise.then.bind(promise); promise.then = function(fn, reject) { let params = fn ? getParameterNames(fn) : []; let fnWrapper = function(result) { if (nextResultIdx >= 0) { results[nextResultIdx++] = result; if (params[0]) results[params[0]] = result; } else { ++nextResultIdx; } context.results = results; if (fn) { return fn(result); } } let newPromise = then(fnWrapper, reject); return wrapPromise(newPromise); } return promise; } return wrapPromise(Promise.resolve()); }