function parseRuleJson(rules, callback) { if (!Array.isArray(rules)) { rules = [rules]; } Q.all(rules.map(function(rule) { var defer = Q.defer(); readRuleList(rule, function(data) { defer.resolve(data); }, true); return defer.promise; })).spread(callback); }
function getRuleValue(rules, callback, noBody, charset, isHtml) { if (noBody || !rules) { return callback(); } if (!Array.isArray(rules)) { rules = [rules]; } Q.all(rules.map(function(rule) { var defer = Q.defer(); readRuleList(rule, function(data) { defer.resolve(data); }, false, charset, isHtml); return defer.promise; })).spread(callback); }
function getFileWriters(files, callback) { if (!Array.isArray(files)) { files = [files]; } Q.all(files.map(function(file) { var defer = Q.defer(); getFileWriter(file, function(writer) { defer.resolve(writer); }); return defer.promise; })).spread(callback); }
function publish() { var mongoP = Q.nbind(api.readFromMongo, api)() // ASYNC var postgresP = Q.nbind(api.readFromPostgres, api)() // ASYNC // easy to fake while debugging: to avoid an API call just assign a Q.when({myProperty: 'myData'}) return Q.all([mongoP, postgresP]) .spread(function readDone(mongoData, postgresData) { // spread is syntactical sugar for then(function(resultsInArray) {}) // throw new Error('ugly') var film = { transcription: mongoData, speaker: postgresData } return Q.nbind(api.triggerHugeProcess, api)(film) // ASYNC }) }
]) .spread(function(askedFilePromise, cachedFilePromise) {