confluence-tool
Version:
library to access atlassian REST API
62 lines (50 loc) • 1.58 kB
text/coffeescript
{promised} = require "./util"
Promise.iterate = (funcs, callback) ->
current = Promise.resolve();
Promise.all funcs.map (func) ->
current = current.then (value) ->
new Promise (resolve, reject) ->
promised func
.then (value) ->
if callback
promised callback value
.then resolve
.catch reject
else
resolve value
.catch reject
Promise.parallel_experimental = (funcs, slots, callback) ->
if slots instanceof Function
callback = slots
slots = funcs.length
index = 0
promises = (Promise.resolve() for item in [0...slots])
values = []
next = ->
return unless index < funcs.length
index += 1
func = funcs[index]
console.log "run func #{index}"
new Promise (resolve, reject) ->
promised func()
.then (value) ->
callback value if callback
values[index] = value
if index < funcs.length
next().then(resolve).catch(reject)
else
resolve()
.catch reject
promises.map (promise, i) ->
promise[i] = promise[i].then(next).catch(reject)
new Promise (resolve, reject) ->
Promise.all promises.map (promise, i) ->
promise[i] = promise[i].then(next).catch(reject)
.then ->
resolve values
.catch reject