→
Promise を返します。
最大 2 つの引数として、Promise が成功した場合と失敗した場合のコールバック関数を取ります。
Note: 片方または両方の引数が省略されたり、関数ではないものが渡されたりした場合、 then にはハンドラーが不足しますが、エラーは発生しません。Promise が状態(履行 (fulfillment) または拒否 (rejection))を受け入れるに当たって then が呼び出された際に、then がハンドラーを持たない場合は、then が呼び出された元の Promise の最後の状態を受け入れた、追加のハンドラーのない新しい Promise が生成されます。
Prom | ¶Promise。 |
---|---|
onFulfilled | 省略可。Promise が成功したときに呼び出される関数(Function)です。この関数は 1 つの引数、fulfillment value を持ちます。これが関数ではない場合は、内部的に "Identity" 関数(受け取った引数を返す関数)に置き換えられます。 |
onRejected | 省略可。Promise が拒否されたときに呼び出される関数(Function)です。この関数は 1 つの引数、rejection reason を持ちます。これが関数ではない場合は、内部的に "Thrower" 関数(引数として受け取ったエラーを投げる関数)に置き換えられます。 |
value | ¶変数。 |
reason | ¶変数。 |
Promise が履行されるか拒否されると、それぞれのハンドラー関数(onFulfilled または onRejected)が非同期に呼び出されます(現在のスレッド ループにスケジュールされます)。ハンドラー関数のこの動作は特定の一連の規則に従います。もしハンドラー関数が・・・
以下は、then メソッドの非同期性を示す例です。
解決されたプロミスを使用すし、'then'ブロックは即座にトリガーされ、ただし、そのハンドラーは、console.logs で示されているように非同期でトリガーされます。
//コンソールにて const resolvedProm = Promise.resolve(33); let thenProm = resolvedProm.then(value => { console.log("this gets called after the end of the main stack. the value received and returned is: " + value); return value; }); //thenPromの値を即座にログに記録します console.log(thenProm); //setTimeoutを使用すると、スタックが空になるまで関数の実行を延期できます。 setTimeout(() => { console.log(thenProm); }); //ログ(この順で) //Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined} //"this gets called after the end of the main stack. the value received and returned is: 33" //Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: 33}
¶省く
//コンソールにて var p1 = new Promise((resolve, reject) => { resolve('Success!'); // or // reject(new Error("Error!")); }); p1.then(value => { console.log(value); // Success! }, reason => { console.error(reason); // Error! });