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

Reference

  • https://github.com/kriskowal/q/wiki/API-Reference