Promise/A+仕様
4592 ワード
Promiseは非同期操作の最終結果を表します.Promiseとの最も主要なインタラクション方法は、関数をそのthen方法に導入することによってPromiseの最終的な値またはPromiseが最終的に拒否される原因を得ることである.
1.用語
2.要求
2.1 Promise状態
一つのPromiseはその中の一つの状態におかなければなりません.もしペンディング状態であれば、promise: は、fulfilledまたはreject状態に変換することができる. ful filled状態であれば、promise: は他の状態に変換できません. には値が必要であり、この値は変更されない. レジェクト状態であれば、promiseは可能です. は他の状態に変換できません. は一つの理由が必要であり、この値は変更されない. 「値を変えることはできない」というのは、そのidentityがメンバーの内容を変えられないということではなく、変更されないということです.
2.2
Promiseは、その値または理由を得るためにthen方法を提供しなければならない.Promiseのthen方法は二つのパラメータを受け入れる. は、 は、 は、 は、 それは は複数回起動されません. は、 は、 それは は複数回起動されません. は、1つの は、 の場合、 もし が実行される.が、 もし 2.3 Promise解析過程
Promise解析プロセスは、1つのpromiseと1つの値をパラメータとする抽象的なプロセスであり、は、 もし もし もし もし
は、 は に賦課する. は、 は、 を実行する.は、 もし でなければ、 は、 は、 追加
英語の原文の住所:http://promisesaplus.com 本文の各規則を理解するには、そのテスト倉庫を参照してください.https://github.com/promises-aplus/promises-tests/tree/master/lib/tests
1.用語
promise
はpromise仕様then方法に対応するオブジェクトまたは関数であり、thenable
は、then方法を含むオブジェクトまたは関数である.value
は任意のJavascript値である.(undefined、thenable、promiseなどを含む)exception
はthrow
表現によって投げられた値です.reason
は、Promiseが拒否された理由を説明するための値である.2.要求
2.1 Promise状態
一つのPromiseはその中の一つの状態におかなければなりません.
2.2
then
方法Promiseは、その値または理由を得るためにthen方法を提供しなければならない.Promiseのthen方法は二つのパラメータを受け入れる.
js
promise.then(onFulfilled, onRejected)
onFulfilled
およびonRejected
はいずれもオプションパラメータである.onFulfilled
が関数ではない場合、無視される.onRejected
が関数ではない場合、無視される.onFulfilled
が関数である場合:promise
fulfilledの後に呼び出されなければならず、promise
のvalueは、その最初のパラメータである.promise
fulfilledの前に呼び出すことができません.onRejected
が関数である場合、promise
rejectの後に呼び出さなければならず、promise
のreasonはその最初のパラメータである.promise
rejectの前に呼び出すことができません.onFulfilled
およびonRejected
は、execution contextスタックにプラットフォームコードのみが含まれている場合のみ実行を許可する.onFulfilled
およびonRejected
は、関数として呼び出されなければならない(i.e.すなわち、関数体内のthis
はundefined
である).promise
に対して、そのthen方法は、複数の回数を呼び出すことができる.promise
fulfilledの後、onFulfilled
のすべてがその登録順に実行されなければならない.promise
rejectの後、すべてのOnRejected
はその登録順に実行しなければならない.then
はpromise[3.3].を返さなければならない.js
promise2 = promise1.then(onFulfilled, onRejected);
onFulfilled
またはonRejected
が値x
に戻ったら、Promise解析フロー[[Resolve]](promise2, x)
.onFulfilled
またはonRejected
が異常e
を投げ出した場合、promise2
はe
をreason
として拒否されるべきである.onFulfilled
が関数ではなく、promise1
が既にfulfilledしている場合、promise2
はpromise1
の値fulfilledでなければならない.OnReject
が関数ではなく、promise1
がすでにrejectiedしているなら、promise2
は同じreasonで拒否されなければならない.Promise解析プロセスは、1つのpromiseと1つの値をパラメータとする抽象的なプロセスであり、
[[Resolve]](promise, x)
として表されることができる.promise
およびx
が同じ値を指す場合、TypeError
を使用して、理由としてpromise
を拒否する.x
がpromise
であれば、その状態を採用する.x
がpending状態であれば、promise
は、pendingをx
fulfilledまたはrejectiedまで歩かなければならない.x
がfulfilled状態であれば、x
の値をfulfill promise
に用いる.x
がreject状態であれば、x
の原因をreject promise
に使用する.x
がオブジェクトまたは関数である場合:then
をx.then
.[3.5]x.then
値を取ったときに異常が発生した場合、この異常を理由にpromise
は拒否される.then
が関数である場合、x
がthis
の関数としてthen
を呼び出し、第1のパラメータはresolvePromise
であり、第2のパラメータはrejectPromise
である.resolvePromise
がy
でパラメータとして起動されると、[[Resolve]](promise, y)
.rejectPromise
をパラメータとして起動すると、r
を理由にr
を拒否する.promise
およびresolvePromise
が呼び出された場合、または何度も呼び出された場合、最初だけ有効で、後は無視されます.rejectPromise
を呼び出したときに異常が発生した場合、then
またはresolvePromise
が呼び出された場合は無視する.rejectPromise
でreasonのためにe
を拒否します.promise
が関数ではない場合、then
を値fulfill x
とする.promise
がオブジェクトでも関数でもない場合、x
を値fulfill x
とする.英語の原文の住所:http://promisesaplus.com 本文の各規則を理解するには、そのテスト倉庫を参照してください.https://github.com/promises-aplus/promises-tests/tree/master/lib/tests