twitterにどうぞ。この広告は、90日以上更新していないブログに表示しています。Canary(正確にはV8)に、ついにGenerators(yield)が入った。これを上手に使うと、エラー処理を含む非同期コードを同期的に書くことができるようになり、見通しが極めて良くなるので、ここで紹介する。ここで紹介するものはいずれNode.jsでも使用できるようになるので、Webとの互換性を気にする必要のないNode.jsでは近いうちに活用できるようになると思う。javascriptを有効にしておく必要がある。HarmonyのGenerator構文についてfunctionではなくfunction*というキーワードを使うと、yieldキーワードが使えるようになる。of構文は実装されていないようなので、まだ使えない。finishedこのように動かすこともできる。send/throwは引数を一つ受け付け、それぞれ、yieldが返す値を指定するとき、yieldに例外を発生させたいときに使う。載っているが、まあPythonのジェネレータとほとんど同じと思うと良いだろう。非同期処理/Promiseとの組み合わせジェネレータのすごいところは、関数を途中で止められるところである。この特性と、Promiseをを組み合わせると、非同期処理を同期的に書くことができる。ここではPromiseの実装としてjQuery.Deferredを使うが、好きなものを使うと良いだろう。p;}まず、後に定義するasync関数を使うと何ができるかを先に示す。});まず、waitを同期的に書けたのがわかる。Promiseの結果を取得することもでき、非同期XMLHttpRequestは下記のように書ける。len);});に対応する。}});と書けばよい。promiseとするだけで完全に同期処理のように扱える。console.log('たぶんgetでエラーが発生した感じがする');});などの組み合わせも、期待通り動く。});}たったこれだけである。ジェネレータを使い同期的に書いたコードもasyncが返す時にはPromiseになり、Promise自体を拡張する必要がないこと、同期/非同期をまぜてほぼ同じように書けること、NodeのDomainのようなこともasyncで囲うだけでできることを考えると、非常に筋がいいと思う。overkillな気がするが、同じコンセプトのもの。一年前から更新されてないし、どうなったのかな?という感じは多少する。Chromeでは動いていない。コードをうごくように修正した。ちなみに、Firefoxはずいぶん前からGeneratorを実装していて、ES6の構文とは多少異なり独自仕様だが、task.jsはFirefoxで動くように作られているので、興味があったら動かしてみると良いだろう。doの見分け方と使い方についてなどArchiveはてなブログをはじめよう!javascripterさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。