up:: JavaScript and TypeScript

var result = new Promise(function(resolve) {
 
    resolve(new Date);
 
})

new Promise()でPromiseオブジェクトができる。これはオブジェクトであり変数に入れられるのがポイント。このオブジェクトには引数として関数を渡すことが出来、その関数の実行が終わるまで待つことが出来る。
引数が欲しい場合は(resolve) => {resolve(var)}として、resolve引数に引数として渡せばいい。

で、このthenはチェーンで連結できる。

result
.then(function(data) { return getSomething1(item) })
 
.then(function(item) { return getSomething2(item) })
 
.then(function(item) { getSomething3(item) })

当然チェーン出来るのはPromiseオブジェクトだけなので、チェーンする場合はreturnでPromiseオブジェクトを受け取ること。

thenの場合でも、元の関数階層と同じく戻り値は次のthen内の引数として渡されている。Promiseオブジェクトから辿っていくと当然の帰結。(resolve引数を関数扱いして引数を与えている→resolve引数に関数オブジェクトが入ってる)

これからわかるように、thenは一つずつ処理を済ませていくタイプ。
一方、Promise.all([Promise...])で一気にPromiseオブジェクトを実行することもできる。非同期処理を一気に終わらせられて効率が良い。
また、この.allもPromiseオブジェクトなので、.thenをくっつけ次の処理を入れることが出来る。

この処理は非同期であるため、正しく結果が返ってこない可能性もある。
エラーの値を返したいなら(resolve, reject) => {}として、resolve同様引数に引数として渡せばいい。というかほぼ確定でresolveとrejectはセット運用するけど。

引数が二つの場合はthen内に関数も二つ入れればOK。

get(url)
.then(function( response ) {
  
    console.log( response );
 
}, function( error ) {
 
 
    //エラー処理を記述する
    console.error( error );
 
})

この書き方的に、たぶんresolveとかrejectって分かりやすくしてるだけで、別にどんな名前でもいいんだろうな。

【JavaScript入門】誰でも分かるPromiseの使い方とサンプル例まとめ! | 侍エンジニアブログ

ちょっと新しくなると、成功なら.then、失敗なら.catchで受け取れるようになる。
こっちはresolveとrejectがちゃんと紐づいてるらしい。

JavaScriptのPromiseオブジェクトのcatchメソッドについて現役エンジニアが解説【初心者向け】 | TechAcademyマガジン

JavaScriptのPromiseを理解する - Qiita