PROMISE

記述方法

// const instance=new Promise(asyncHandler); <= new Promiseのコーバック関数内で非同期処理を行う
  // function asyncHandler(resolve, reject) {  <= resolve,reject の2つの引数が渡されてくる
  //   setTimeout(() => {
  //     if (非同期処理が成功 ?) {
  //       resolve(data); <= 成功の場合、thenの処理(引数data)
  //     } else {
  //       reject(error); <= 失敗の場合、catchの処理(引数error)
  //     }
  //   });
  // }
  new Promise((resolve, reject) => {
    setTimeout(() => {
      const sec = new Date().getSeconds();
      if (sec % 2 === 0) {
        resolve(sec);
      } else {
        reject(sec);
      }
    }, 1000);
  }).then((sec) => {
    console.log(`${sec}は偶数です`)
  }).catch((sec) => {
    console.log(`${sec}は奇数です`)
  }).finally(() => {
    console.log(`終了します`)
  })

Promiseチェーン記述方法

  const Promiseインスタンス1 = new Promise(...);
  const Promiseインスタンス2 = new Promise(...);
  const Promiseインスタンス3 = new Promise(...);

  Promiseインスタンス1
  // thenのコールバック関数のreturnにPromiseインスタンスを渡す
    .then(data1 => { return Promiseインスタンス2; })
    .then(data2 => { return Promiseインスタンス2; })
    .catch(error => { エラー発生時の処理 })
    .finally(() => { 終了時の処理 });
function promiseFactory(count) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      count++;
      console.log('COUNT:', count);
      if (count < 3) {
        resolve(count);
      } else {
        reject(count);
      }
    }, 1000);
  });
}
promiseFactory(0)
  .then(count => { return promiseFactory(count); })
  .then(count => { return promiseFactory(count); })
  .then(count => { return promiseFactory(count); })
  .then(count => { return promiseFactory(count); })
  .catch(count => { console.log('CATCH(error):', count) })
  .finally(() => { console.log('FINALLY') });
async function wrapPromise() {
  try {
    let count = await promiseFactory(0)
    count = await promiseFactory(count)
    count = await promiseFactory(count)
    count = await promiseFactory(count)
    count = await promiseFactory(count)
  } catch (error) {
    console.log('CATCH(error):', error)
  }
}
wrapPromise();