DeferredではなくPromiseを渡しておけば、渡した先で勝手に状態を変更されたりしなくて安心、ってこと。一度にできて便利、というだけではなかった(jQuery1.8以降)。返す値は元のPromiseそのものである(Deferredではなくて?)。新たなPromiseを作成して返す。普通の関数を渡した場合とPromiseを返す関数を渡した場合も動作が違う。これら違いについて下記の3つの関数を使って具体的に説明する。2秒後にコンソールに出力する。Promiseを返す。メソッドチェーンを作成している。同じp1に対する処理である。間を置かずに続けて実行される。consoleには以下のように出力される。普通の関数を渡してメソッドチェーンを作成している。返すPromiseは前のPromiseとは異なるオブジェクトであるが、状態は引き継ぐ。間を置かず続けて実行される。consoleには以下のように出力される。Promiseを返す関数を渡してメソッドチェーンを作成している。resolvedになる。2秒の間隔を開けて順番に実行される。consoleには以下のように出力される。処理を連結するとなにがうれしいかというと、「順番に非同期処理を行う」コードを「コールバック地獄」(参考2)にならず直感的に書けるということのようだ。「処理を直列に連結」という説明がイメージ的にわかりやすい。引数に1個以上のオブジェクトを取り、渡されたオブジェクトをまとめたPromiseを返す。引数がDeferredまたはPromiseの場合、引数のオブジェクトがすべてresolvedになると、返されたPromiseもresolovedになる。引数のオブジェクトのうち1つでもrejectedになると、返されたオブジェクトはrejectedになる。引数がDeferred、Promiseではない場合、resolvedなものとして扱われる。よる「直列の連結」に対して「並列の連結」と言われる。利用するケースとしては、複数の非同期処理を実行し、すべての非同期処理が終了したところで新たな処理を行うことが考えられる。以下のように出力される。使うが、表示されるダイアログのデザインやボタンの文言を変更などいったカスタマイズはできない。公式ページがすでになくなっていてるので開発は停止しているようだ。404ページの下にarchivesというリンクがあって、その先のページでダウンロードできる。