[js] 次世代JavaScriptのawait (Deferred Functions)
この記事で知ったのですが、次世代JavaScriptのawaitという機能が楽しそうです。
function sleep(ms) { var deferred = new Deferred(); window.setTimeout(function() { deferred.callback(); }, ms); return deferred; } function foo() { for (var i = 0; i < 10; ++i) { console.log(i); await sleep(1000); } } foo();
これで1秒おきにconsole.logに出力されます。awaitというキーワードで非同期関数を同期関数風に呼び出せます。
実はCoffeeScriptでも使える(つまり、CoffeeScriptをコンパイルしてさらにTraceurでコンパイルするすれば動く)ことを発見しました。
sleep = (ms)-> deferred = new Deferred() window.setTimeout((-> deferred.callback()), ms) return deferred foo = -> for i in [0...10] console.log(i) await sleep(1000) null foo()
CoffeeScriptはawaitを関数だと思ってawait(sleep(1000))に変換しますが、余計な括弧があっても通るので、ちゃんと動きます。そのあとにnullが必要なのが微妙ですが*1。
*1:nullを入れないと_results.push(await(sleep(1000) ) );が生成されてエラーに。