--- title: Q.js category: JavaScript libraries layout: 2017/sheet --- ### About {: .-intro} * * ### Creating promises (Q.promise) Q.promise (ok, fail) => asyncFunction -> if error fail new Error("Failure") else ok(data) ### For arrays promises = [saveDisk(), saveCloud()] # When all succeeds, or *at least one* error Q.all(promises).done -> alert "Saved" # Same, but get the values Q.all(promises).spread (a, b) -> alert "Result A:" + a alert "Result B:" + b # When all either succeeds or errors Q.allSettled(promises).done -> ... ### Creating promises from Node # Works like .call() or .apply() Q.nfcall(FS.readFile, 'foo.txt', 'utf-8') .then -> ... Q.nfapply(FS.readFile, ['foo.txt', 'utf-8']) .then -> ... Q.npost(FS, 'readFile', ['foo.txt, 'utf-8']) .then -> ... Q.npost(FS, 'readFile', 'foo.txt, 'utf-8') .then -> ... readFile = Q.denodeify(FS.readFile) readFile('foo.txt').then -> ... ### Promises to Node async createUser = (next) -> promiseMaker() .nodeify(next) ### Promise sugars # Shortcut for .then(ok, fail, progress) promise .then (data) -> .catch (err) -> .progress (percent) -> ### Try Q.try -> promise() .catch (e) -> console.error "Oh well", e