読者です 読者をやめる 読者になる 読者になる

Promiseの覚え書き

Promise

非同期処理の実行順とかもろもろを制御できるっぽい。全容はいまいちわかってないのでこのへんを読むのをお勧めします。

Example

task = ()->
  new Promise (resolve, reject) ->
    someAsyncFunction (err, obj)-> # callback
      unless err
        # any process
        resolve obj
      else
        # on error
        reject err
task().then((obj) -> # obj is resolve's argument
  console.log obj
).catch (err) -> # err is reject's argument
  console.log err

って感じでthenはresolveが呼ばれるまで待ってからコールバックを実行し、catchはrejectが呼ばれるまで待ってからコールバックを実行します。簡単です。

Serial Process With Promise

PromiseをChainしてAsyncな処理を直列実行することもできます。その場合はthenにPromiseオブジェクトを渡すようなコールバック関数を設定します(catchでも良いが)

arr = [1..4]
promises = arr.map (o) ->
  (pre) ->
    new Promise (resolve) ->
      console.log o
      setTimeout ->
        resolve(o + pre)
promises.reduce((pre, cur) ->
  pre.then cur
, Promise.resolve(0)).then (last) ->
  console.log last

これで配列内の要素を順番に1秒ごとに足してコンソールに吐く処理ができます。

書かないと忘れるので備忘録的に書いたけど需要なさそう…