JSの非同期処理を初めてES6のPromiseを使ったものに書き換えてみた

はじめに 「javascriptの非同期処理を同期ぽく綺麗に書けるようになるPromiseというのがある」 という話は少し小耳にはさんでいて、便利なんだろなーと思いつつも手が出ていませんでした。 意を決してお勉強して、自分の理解を文字に起こしつつ非同期処理をPromiseを使った形式に書き換えていってみたらけっこう分かった気がしましたし、初学者向けの記事になりえるなと思ったので公開します。 PromiseとJavascriptにおけるPromise まずPromiseとはなんぞやってことなんですが、PromiseはFutureというデザインパターンの別名らしいです。 http://ja.wikipedia.org/wiki/Future ちょっと上記から引用すると 「future, promise, delay とは、プログラミング言語における並列処理のデザインパターン。何らかの処理を別のスレッドで処理させる際、その処理結果の取得を必要になるところまで後回しにする手法。処理をパイプライン化させる。1977年に考案され、現在ではほとんどのプログラミング言語で利用可能。」 とのことですので、別に新しいものではなく、並列処理で必要なデザインパターンだと。いろんな環境でもともと実装されているけど、javascriptでは実装されていなかったので非標準ライブラリでいろいろ実装されたと。でもってやっぱり便利なので、ECMAScript6=ES6で標準で実装されることになったと。 ということで、標準になるみたいですしなら勉強しときましょうってことですね。 非同期処理をPromiseを使って書き換える ではさっそくなんとなく書き換えていきましょう。 以下からpromiseの自分の理解をつらつらと書き下しつつ, Promiseを使った処理に書き換えていくときのメモです。よって、ちょっと口調が適当です。あしからず。 ある非同期処理A(webapiの呼び出しなど)を行い、成功時には処理Bを、失敗時には処理Cを実行したいとする。 function A(callback) { callWebApi(function (error, data) { if (error) { callback(error); } else { callback(null, data); } }); } function B(data) { console.log(data) }; // これ以後の参考ソースでは略す function C(error) { console.log(error) }; // これ以後の参考ソースでは略す A(function (error, data) … Continue reading JSの非同期処理を初めてES6のPromiseを使ったものに書き換えてみた