Promises/A+仕様


Promises/A+は開放的な標準を規範化し、開発者に提供される操作可能なJavaScript promiseを実現する.promiseは非同期操作の最終結果を表しています.promiseとインタラクションする主な方法はそのthen方法によって、then方法はpromiseの最終値またはpromiseが実現できない原因を登録することによって修正される.この仕様は、then方法の挙動を詳細に説明し、相互操作の基礎を提供し、すべてのPromises/A+が一致するpromise実装は、それに依存して提供することができる.したがって、仕様は非常に安定していると考えられるべきです.Promises/A+組織は、たまにこの仕様に対して小さな後方互換性のある変更を行い、新たに発見された小さな問題を解決しますが、よく考え、議論、テストしてからこそ、大きな変更または後方互換性のない変更を集められます.歴史的に見て、Promises/A+は初期Promise/Aに提案された行動条項を解明し、事実上カバーされた行為に拡張し、未指定または問題がある部分を省略しました.最後に、コアPromises/A+仕様は、どのようにプロミセを作成、実現または拒否するかに関わらず、相互操作可能なthen方法を提供することに集中する.今後のサポート仕様における仕事はこれらのテーマに関わるかもしれません.
1.用語
  • 「promise」は、then挙動が本仕様に適合するオブジェクトまたは関数である.
  • 「thenable」は、then方法を定義するオブジェクトまたは関数である.
  • 「値」は任意の合法的なJavaScript値である(undefined、ableまたはpromiseを含む).
  • 「exception」は、このthrow文を用いて引き起こされる値である.
  • 「理由」は、プロモーションを拒否した理由を示す値です.
  • 2.要求
    2.1 promise状態
    プロミスは次の3つの状態の一つにならなければなりません.
  • タイミング待ちで、promise:実現された、または拒否された状態に変換されるかもしれません.
  • 実現時、promise:
  • は他の任意の状態に遷移してはならない.
  • は値を持っていなければなりません.この値は変更できません.
  • 拒否された時、promise:
  • は他の任意の状態に遷移してはならない.
  • は変えることができない理由が必要です.
  • ここで、「変更してはいけない」というのは不変の身分(すなわち===)を意味しますが、深層の不変性を表していません.
  • 2.2 then方法
    promiseは、thenが現在または最終的な価値または原因にアクセスする方法を提供しなければならない.許諾されたthen方法は二つのパラメータを受け入れる.
            promise.then(onFulfilled, onRejected)
  • この2つのオンフルfilledとオンリージェクトのオプションのパラメータ:
  • onFulfilledが関数でない場合は無視しなければなりません.
  • オンリーテックが関数でない場合は無視しなければなりません.
  • onFulfilledが関数である場合:
  • はpromise実装後に呼び出され、最初のパラメータとしてpromiseの値を持つ必要があります.
  • はpromiseが実現する前に必ず呼び出されません.
  • は何回も起動できません.
  • オンリーテックが機能すれば、
  • は、プロミセが拒否された後、プロミスの理由で最初のパラメータとして呼び出さなければなりません.
  • プロモーションが拒否される前に呼び出しできません.
  • は何回も起動できません.
  • onFulfilledまたはonRejecedは、コンテキストスタックがプラットフォームコードだけを含む前に呼び出されません.[3.1]
  • onFulfilled、onRejecedは関数として呼び出さなければなりません.すなわち、this値がありません.[3.2]
  • thenは、同じ約束の中で何度も呼び出されるかもしれない.
  • もし/いつpromiseが完了すれば、それぞれのオンフロfilledコールバックはそのペアの元の呼び出しの順序でthenを実行しなければならない.
  • もし/いつpromiseが拒否されたら、それぞれのオンリーテックのフィードバックはそのペアの元の呼び出しの順にthenを実行しなければならない.
  • thenはpromise[3.3]を返さなければなりません.
  • がある場合、値xを返します.Promise Resolution Procedure[Resove]を実行してください.
  • 任意のオンフルフィルドまたはオンリージェクトに異常が発生した場合、プロミゼ2はeを理由に拒否しなければならない.
  • オンフロフィルが関数ではなく、プロミゼ1が実装されている場合、プロミゼ2は同じ値を使用してプロミゼ1を実現しなければならない.
  • onRejectが機能ではなく、promise 1が拒否された場合、promise 2は同じ理由でプロミゼ1を拒否しなければなりません.
  •        promise2 = promise1.then(onFulfilled, onRejected);
    2.3 promise解決プログラム
    プロミスの解決過程は抽象的な操作であり、プロミスと値を入力して、それは私たちを[Resolive]として表しています.xが可能であれば、少なくとも約束に近い行為の仮定のもとで、promiseの採用を試みる状態である.さもなくば、それはvalueを満たします.xxpromisexは約束の実現に向けてPromises/A+互換性のあるthenメソッドを公開すれば、約束の実現に向けて相互操作が可能となります.これはまた、Promises/A+が合理的なthen方法で「同化」不適合の実現を可能にする.[Resolive]を実行するには、以下の手順を実行してください.
  • promiseとxが同じ対象を引用すると、promiseはType Errorを拒否するという理由である.
  • xがpromiseであれば、その状態を採用する[3.4].
  • xが未決の場合、promiseはxが実現されるか、または拒否されるまで未決の状態を維持しなければならない.
  • もし/いつxが満たされれば、promiseは同じ値で満たされます.
  • /いつxが拒否されたら、プロミスは同じ理由で拒否されます.
  • そうでなければ、xがオブジェクトまたは関数であれば、
  • thenはx.thenである.[3.5]
  • 属性x.thenに投げられた異常な結果eを検索すると、promiseとeを拒否する原因となります.
  • もしthenが関数であれば、xas thisを使用して、最初のパラメータreject Promiseと第二のパラメータを呼び出してください.
  • もし/いつかresovePromiseが値を使ってyを呼び出したら、[Resolive]を実行してください.
  • 場合/reject Promiseは理由rを持っていますが、promiseとrを拒否します.
  • が、同じパラメータを何度も呼び出した場合、最初の呼び出しが優先され、他の呼び出しは無視されます.
  • thenを起動すると異常eが発生し、
  • レノベPromiseまたはreject Promiseが既に呼び出されている場合は無視する.
  • そうでなければ、プロミスとeを拒否する理由とします.
  • もしthenが関数ではないなら、promise用xを実現します.
  • xがオブジェクトまたは機能でない場合、promiseとxを実現する.
  • サイクルに関与する循環可能チェーンの拡張可能なものを使用して、約束を解決したら、「Resolive」(promise、thenable)の最終的な再帰的性質が最終的に「Resove」(promise、thenable)を再度起動させると、上述のアルゴリズムに従って無限再帰を招くことになる.この再帰的かつpromiseを検出するためには、情報TypeErrを提供する理由で、必須の実装ではない.[3.6]
    3.メモ
  • ここでの「プラットフォームコード」とはエンジン、環境とpromise実現コードのことです.実際には、この要求は、イベントサイクルを呼び出した後、新しいスタックone Fulfilledを使用して、Onerejeced非同期でthenを実行することを確実にすることができる.これは、「マクロタスク」機構(例えば、setTimeoutまたはsetImmediate)または「マイクロタスク」機構(例えば、MuttionObserverまたは)によってprocess.nextTickを実現することができる.promise実装はプラットフォームコードとして認識されているので、それ自体は、処理プログラムを起動するタスクスケジュールキューまたは「トランポリン」を含むことができる.
  • つまり、厳密なモードではthisがundefinedに出現する.ズボラモードでは、グローバルオブジェクトになります.
  • promise 2==promise 1が要求を満たすことを実現すれば、実現は許可されます.各実装は、プロミゼ2==promise 1の生産が可能かどうかを記録し、どのような条件で生産されています.
  • は通常、xだけが現在の実装から来て、これが本当のプロモーションであることを知っています.このセクションでは、特定のインプリメンテーションを使用して、プロに適合していることが知られている状態を採用することができます.
  • は、まず、ペアの参照x.thenを記憶し、参照をテストし、その後、参照を呼び出すプロセスは、x.then属性への複数のアクセスを回避する.このような予防措置は、訪問者属性の整合性を確保するために重要であり、訪問者属性の値は2回の検索の間で変化する可能性があるからである.
  • 実装は、thenableチェーンの深さに対する制限を設けず、任意の制限を超えた再帰が無限であると仮定する.本当の周期だけがType Errorを引き起こすことができます.無限に複数の違った缶詰があるなら、いつまでも再帰するのが正しい行為です.
  • 原文の住所