→
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!
});