"Fossies" - the Fresh Open Source Software Archive

Member "Atom/resources/app/apm/node_modules/slide/lib/async-map-ordered.js" (8 Mar 2017, 1729 Bytes) of archive /windows/misc/atom-windows.zip:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Javascript source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 
    2 throw new Error("TODO: Not yet implemented.")
    3 
    4 /*
    5 usage:
    6 
    7 Like asyncMap, but only can take a single cb, and guarantees
    8 the order of the results.
    9 */
   10 
   11 module.exports = asyncMapOrdered
   12 
   13 function asyncMapOrdered (list, fn, cb_) {
   14   if (typeof cb_ !== "function") throw new Error(
   15     "No callback provided to asyncMapOrdered")
   16 
   17   if (typeof fn !== "function") throw new Error(
   18     "No map function provided to asyncMapOrdered")
   19 
   20   if (list === undefined || list === null) return cb_(null, [])
   21   if (!Array.isArray(list)) list = [list]
   22   if (!list.length) return cb_(null, [])
   23 
   24   var errState = null
   25     , l = list.length
   26     , a = l
   27     , res = []
   28     , resCount = 0
   29     , maxArgLen = 0
   30 
   31   function cb (index) { return function () {
   32     if (errState) return
   33     var er = arguments[0]
   34     var argLen = arguments.length
   35     maxArgLen = Math.max(maxArgLen, argLen)
   36     res[index] = argLen === 1 ? [er] : Array.apply(null, arguments)
   37 
   38     // see if any new things have been added.
   39     if (list.length > l) {
   40       var newList = list.slice(l)
   41       a += (list.length - l)
   42       var oldLen = l
   43       l = list.length
   44       process.nextTick(function () {
   45         newList.forEach(function (ar, i) { fn(ar, cb(i + oldLen)) })
   46       })
   47     }
   48 
   49     if (er || --a === 0) {
   50       errState = er
   51       cb_.apply(null, [errState].concat(flip(res, resCount, maxArgLen)))
   52     }
   53   }}
   54   // expect the supplied cb function to be called
   55   // "n" times for each thing in the array.
   56   list.forEach(function (ar) {
   57     steps.forEach(function (fn, i) { fn(ar, cb(i)) })
   58   })
   59 }
   60 
   61 function flip (res, resCount, argLen) {
   62   var flat = []
   63   // res = [[er, x, y], [er, x1, y1], [er, x2, y2, z2]]
   64   // return [[x, x1, x2], [y, y1, y2], [undefined, undefined, z2]]
   65