非同期メソッドを書きやすく拡張されたIcedCoffeeScript が登場
IcedCoffeeScriptなんてのができていた。(フォーク元は最新のv1.2.0)
非同期関連を書きやすくしたもの。その意味ではtame.jsなどとコンセプトは同じ。
生成されるコードはIcedCoffeeScript -> CoffeeScript
使い方
公式サンプルより
search = (keyword, cb) -> host = "http://search.twitter.com/" url = "#{host}/search.json?q=#{keyword}&callback=?" await $.getJSON url, defer json cb json.results
await の非同期関数の返り値を、defer 受け取ってそのクロージャに吐き出す。直列に記述されているようだが、実際にはawait以下はコールバックの中になる。(その操作を隠蔽している)
非常にシンプル。
await for ~も使えるらしい。
out = [] await for k,i in keywords search k, defer out[i]
雑感
生成されるコードを覗くと、resultとかlaunchとかの名前空間を平気で汚していて、せめてアンダーバープレフィックスを付けてほしい気持ちはある(CoffeeScriptは_refs1みたいな感じ)
自分はちょっとまだ信頼できないので使わないかなといった印象
これがメジャーになるのは考えにくいとは思うが、本家でも議論されている非同期メソッドAPI提案として実装されたのはGJだと思う。本家で採用されたら使ってもいい、ぐらい。
そういえば自分もこんなことできるやつを書いてみた、けど使ってない。
fs = require 'fs' main = -> err,txt1 <- fs.readFile 'hello1.txt', next err,txt2 <- fs.readFile 'hello2.txt', next err,txt3 <- fs.readFile 'hello3.txt', next console.log i.toString() for i in [txt1,txt2,txt3] main()
CoffeeScriptの文法拡張して非同期でネストが深くならないようにしてみた - mizchi log
みんなが納得できるシンタックスが提案されて採用されるといいですね