前情提要：在 godfat 講「rest-core 的承諾」的那段時間，私下討論跟比較過 js 這邊慣用的 promise 用起來長怎樣。雖然一段時間前也討論過，但那時對 promise 還不熟，也沒寫 LiveScript 。

最近的心得可以在[這裡](https://github.com/caasi/sandbox/blob/master/livescript/promises.ls)找到。

特別喜歡這段：

```Livescript
#!/usr/bin/env lsc
require! {
  rsvp: { Promise, all, hash }:RSVP
  'prelude-ls': { apply, is-type }
}

wrap = ->
  switch
  | it |> is-type 'Array'  => all it
  | it |> is-type 'Object' => hash it
  | otherwise              => Promise.resolve it
p       = -> Promise.resolve it
promisy = (f) -> (...args) -> wrap args .then (args) -> wrap f `apply` args
log     = promisy console.log
add     = promisy (+)

log p(41), 43
log add 41, p(43)

# more usages for you
class People
  (@name_, @friend_) ~>
  name:~
    -> new Promise (resolve, reject) ~>
      (~> resolve @name_) `setTimeout` 300
    (v) -> @name_ = v
  friend:~
    -> new Promise (resolve, reject) ~>
      (~> resolve @friend_) `setTimeout` 300
    (v) -> @friend_ = v
var opal
ruby = People \ruby
opal = People \opal, ruby
ruby.friend = opal

start-time = Date.now!
ps =
  * Promise.resolve ruby
      .then (.friend)
      .then (.friend)
      .then (.name)
  * ruby.name
apply log, ps
all ps .then -> console.log Date.now! - start-time
```

下面附上信的一部分，與提到的參考資料 XD

---

godfat:

> 我認為 ES6 的 generator 進來後，這 promise 其實就不太需要了
> 當然跟現有程式溝通是另一回事就是了

promise 的部分今天都當面講完了（灑花）。

以前我讀到的是這篇「Call/CC与Node.js」：
https://blog.kghost.info/2011/10/31/callcc-and-node-js/

node.js 在 0.1.30 前自己就有 promise ：
http://japhr.blogspot.tw/2010/04/no-more-promises-in-nodejs.html

嗯，然後 generator, continuation, CPS 變換什麼的，
大概就是下一波讓 js programmer 自我感覺良好的關鍵 XD

像現在的 closure 那樣。

> 噢噢噢，可以開在 chrome 嗎？ :D

看來是可以的？
https://code.google.com/p/v8/issues/detail?id=2355

我用的關鍵字是： "enable es6 v8 chrome"

> 嘎，這是 MRI 沒錯，看來是 2.1 才改的 ><
> 奇怪，我太早把他當 public 了...
> 無奈 pull request 裡我是直接寫在 commit message 上，不便改.. XD

XDDDD

這封信沒多少以前的訊息，我會公開貼出來，
希望朋友都看得到，也方便一起討論。

---

## UPDATE (2026-03-06)

This section is written by me + LLM.

In 2026, most developers I meet are not familiar with generators, continuations, or CPS transformation anymore.

Most people still struggle to use React Hooks correctly.

For most CRUD-based web apps, higher-order control-flow logic is usually unnecessary.
