Javascript/非同期処理

コールバック関数
setTimeout(() => {
  console.log(3);
  setTimeout(() => {
    console.log(2);
    setTimeout(() => {
      console.log(1);
    }, 1000);
  }, 1000);
}, 1000);
	
Promise
new Promise(resolve => {
  setTimeout(() => {
    console.log(3);
    resolve();
  }, 1000)
}).then(() => {
  return new Promise(resolve => {
    setTimeout(() => {
      console.log(2);
      resolve();
    }, 1000);
  });
)}.then(() => {
  return new Promise(resolve => {
    setTimeout(() => {
      console.log(1);
      resolve();
    }, 1000);
  });
});
	
async/await
async function func(){
  await log(3);
  await log(2);
  await log(1);
}

function log(num){
  retun new Promise(resolve => {
    setTimeout(() => {
      cosnole.log(num);
      resolve();
    }, 1000);
  });
}

func();