UNPKG

hubs

Version:

``` Caryl ------ courier3 / \ / \ courier1 courier2

45 lines (39 loc) 1.17 kB
module.exports = function promiseTree(items, callback) { var waitingDefers = {} // promise tree var keys = Object.keys(items) keys.forEach(key => { // promise for waiting dependency waitingDefers[key] = defer() waitingDefers[key].promise = waitingDefers[key].promise .then((data) => { return callback({data, key}) }) if (!items[key].dep) { waitingDefers[key].resolve([]) } }); keys.forEach(key => { if (!items[key].dep) return // use Promise.all to wait for dependency, and then resolve the waitingDefer Promise.all( items[key].dep.map(k => { return waitingDefers[k].promise }) ).then(waitingDefers[key].resolve) }); return Promise.all(keys.map(key => waitingDefers[key].promise)) } function defer() { var resolve = null; var reject = null; var promise = new Promise(function (rs, rj) { resolve = rs; reject = rj; }); return { promise, resolve, reject } }