2) Promiseとは何か
ひと昔前の非同期処理では、メソッドにコールバックを渡す手法が取られてきました。コールバックの渡し方や扱いはライブラリによって決定されます。そこで、非同期処理の手法をオブジェクトとして定義すれば様々なライブラリ間で共通した表現ができると考えられたのが Promise です。 Promiseとは非同期処理を抽象化したオブジェクトと、それを操作する仕組みの事を言います。
Promiseオブジェクトの定義
Promiseオブジェクトがどのような表現を持っているかは CommonJS で定義されています。Promiseオブジェクトの表現方法は段階によって分かれており、Promises/A,Promises/B…のような名前が付いています。
ECMAScript6で定義されているPromiseオブジェクトは Promises/A+ というコミュニティベースの仕様が元になっています。 (この記事では ES6 Promise という表記で統一しています)
Promises
http://wiki.commonjs.org/wiki/Promises
Promises/A+
https://promisesaplus.com/
Promise Objects
http://www.ecma-international.org/ecma-262/6.0/#sec-promise-objects
どの環境でも使えるのか?
ECMAScriptで定義されているものはライブラリやブラウザごとの対応状況が公開されています。
ECMAScript 6 compatibility table
http://kangax.github.io/compat-table/es6/
InternetExplorerなど未対応の環境では、ネイティブのオブジェクトとしてPromiseオブジェクトを使う事はできません。
polyfillライブラリ
非対応の環境では以下のような polyfillライブラリ を読み込む必要があります。
本記事の各章で紹介しているplunkerを使ったサンプルは es6-promise を使用しています。