async/await 순서대로 처리하고 싶을 때의 쓰기

설명이 거의 없다.쓰기 방법을 보고 느껴보세요.👹

사전 지식


결과는 모두 같다

콜백 함수 사용


setTimeout( function(){ console.log(3) } ,1000 );
setTimeout( function(){ console.log(2) } ,2000 );
setTimeout( function(){ console.log(1) } ,3000 );
setTimeout( () => console.log(3) ,1000 );
setTimeout( () => console.log(2) ,2000 );
setTimeout( () => console.log(1) ,3000 );

지옥으로 돌아가다


setTimeout( function() {
  console.log(3);
  setTimeout( function() {
    console.log(2);
    setTimeout( function(){
      console.log(1);
    },1000);
  },1000);
} ,1000);
setTimeout( function() { console.log(3);
  setTimeout( function() { console.log(2);
    setTimeout( function(){ console.log(1); },1000); },1000); } ,1000);
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


func = async() => {
  await log(3);
  await log(2);
  await log(1);
}

log = (num) => {
  return new Promise(resolve => {
    setTimeout(()=>{
      console.log(num);
      resolve();
    },1000)
  });
}

func();

메시지


두 처리 순서를 바꾸다

비동기 처리


function lightTask() {
  console.log("HIRO.です。");
}
 
function heavyTask() {
  const procedure = () => {
    console.log("僕の名前は");
  }
  setTimeout(procedure, 1000);
}
 
function sample() {
  heavyTask();
  lightTask();
}
 
sample();

순서대로 처리하다


function lightTask() {
  console.log("HIRO.です。");
}

function heavyTask() {

  return new Promise((resolve) => {//Promise型を返す

    function procedure() {
      console.log("僕の名前は");
      resolve();
    }

    setTimeout(procedure, 1000);

  });

}

async function sample() {
  await heavyTask();
  lightTask();
}

sample();
  • await에서 호출된 함수에서promise 대상을 되돌려야 합니다
  • return 대신 Resolve로 되돌아오기 (이것을 잊어버리면 제어가 회복되지 않습니다)
  • await를 사용하는 함수에 async
  • 추가
  • await 호출을 사용하여 처리가 끝날 때까지 기다립니다
  • then 메서드 사용


    function lightTask() {
      console.log("HIRO.です。");
    }
    
    function heavyTask() {
    
      return new Promise((resolve) => {//Promise型を返す
    
        function procedure() {
          resolve("僕の名前は");
        }
    
        setTimeout(procedure, 1000);
    
      });
    
    }
    
    async function sample() {
      await heavyTask().then(
        (value)=>{console.log(value);}//heavyTaskが終わってからじゃないとconsole.logは表示されない
      );
      lightTask();
    }
    
    sample();
    

    좋은 웹페이지 즐겨찾기