質問: **Thenableについて** ・どういう意味? ・then メソッドを持っているオブジェクトがThenable? ・promiseで、.thenと書けばThenable? ・それとも、promiseオブジェクト間の相互変換がThenable? --- **下記記述で、なぜQ promiseオブジェクトへ変換することが出来るのでしょうか?** ・Qライブラリ専用の書き方? ``` // Q promiseオブジェクトに変換する Q(promise).then(function(value){ console.log(value); }) ``` > > Q(thenable) とすることでThenableなオブジェクトをQ promiseオブジェクトへと変換することが出来ます > > > --- **「ES6 のPromisesオブジェクト」を、「他ライブラリの Promises風オブジェクト」へ変換する方法について** ・他ライブラリが、promiseオブジェクトを返す関数を公開APIとして用意していれば、それに従うだけ? ・Thenableという考え方が共通しているだけで、相互変換実装方法はライブラリ毎に異なるということでしょうか?
回答: Q Promiseについてはあまり詳しくないので参考程度ですが > > ### Thenableについて > > > then メソッドを持っているオブジェクトがThenable? > > > thenを持っているPromiseのようなオブジェクトのことをいいます > > ### 下記記述で、なぜQ promiseオブジェクトへ変換することが出来るのでしょうか? > > > `Q(promise)`はQ Promiseオブジェクトを返します。引数としてthenableなオブジェクトを与えるとそれをPromiseに変換するのではないでしょうか? > > ### 「ES6 のPromisesオブジェクト」を、「他ライブラリの Promises風オブジェクト」へ変換する方法について > > > 他ライブラリが、promiseオブジェクトを返す関数を公開APIとして用意していれば、それに従うだけ? > > Thenableという考え方が共通しているだけで、相互変換実装方法はライブラリ毎に異なるということでしょうか? > > > 1. ES6 Promiseの場合はその関数は`Promise.resolve`になります。その関数や方法はライブラリによって異なります 2. Promiseについての注意書き > > then というメソッドを持っていた場合でも、必ずES6 Promisesとして使えるとは限らない事は知っておくべきでしょう。 > > >