 
 runFlow = (flowFns, err, args, outCallback)->
   debug 'runFlow start', err, args
+  return outCallback err, args... if flowFns.length is 0   
+
   errorHandlerArity = args.length + 2 # include err, callback
+  [fn, fns...] = flowFns  
+  
+
+  _goNext = (err)->
+      debug 'runFlow _goNext : err = ', err
+      runFlow fns, err, args, outCallback  
+
   if err
-    flowFns = cutFlowsByArity(flowFns, errorHandlerArity)    
-  
-  return outCallback err, args... if flowFns.length is 0 
-  
-  [fn, fns...] = flowFns  
+    return _goNext err if _isArray fn
+    return _goNext err if fn.length isnt errorHandlerArity  
+
+    # flowFns = cutFlowsByArity(flowFns, errorHandlerArity)    
 
   if _isArray fn 
     fnArr = fn.map (flow)->  

    catch error
      fnDone error

# _fn.do = (args..., fn)->
#   debug 'do  with ', 'args=', args, 'fn=', fn
#   fn args... 
_fn.delay = (msec, fn)->
  return (args...)->
    setTimeout ()->
      fn args...
    , msec 
#   _fn.delay(msec, fn) args...

_fn.wrap = (preFns,postFns)->
  preFns = [preFns] unless _isArray preFns

    inFns = [inFns] unless _isArray inFns
    return _fn.flow [preFns..., inFns..., postFns...]


ficent = (args..., flowFns)->
  _fn.flow flowFns
