Cheat Sheet速查表
跳转到主要内容

Q.js 速查表

本文根据 Devhints / Q.js 翻译。代码示例及版本范围沿用原文。

关于

创建 Promise (Q.promise)

Q.promise (ok, fail) =>
  asyncFunction ->
    if error
      fail new Error("Failure")
    else
      ok(data)

针对数组

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 -> ...

从 Node 创建 Promise

# 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 -> ...

Promise 转 Node 异步操作

createUser = (next) ->
  promiseMaker()
  .nodeify(next)

Promise 语法糖

# Shortcut for .then(ok, fail, progress)
promise
.then (data) ->
.catch (err) ->
.progress (percent) ->

Try

Q.try -> promise()

.catch (e) -> console.error “Oh well”, e