FE/Javascipt

[Javascript] 동기와 비동기

따봉치치 2023. 8. 21. 18:31
728x90

동기와 비동기

  • 동기 : 순차적으로 코드가 실행됨
  • 비동기 : 순차적으로 코드가 실행되지 않음

 

Promise : 자바스크립트에서 제공하는 비동기를 간편하게 처리할 수 있도록 도와주는 객체

resolve 키워드를 사용해 실행 순서를 보장

const a () => { //인자로 콜백함수를 받지 않아도 됨
	return new Promise(resolve=> {
		setTimeout(() => {
			console.log(1)		
			resolve() //실행 순서 보장
		},1000)
	})
}

a().then(()=>{ b() })
  • 대기 pending : 초기 상태
  • 이행 fulfilled : 작업이 성공적으로 안료된 상태를 의미. then을 통해 결과값 반환 가능
  • 거부 rejected : 작업이 실패했음을 의미, catch로 에러 처리 가능

 

  • 이행 혹은 거부 상태가 되면 더이상 다른 상태로 변화하지 않음(한번만 실행됨)
  • 비동기 처리 시점을 명확하게 표현할 수 있다.
  • 연속된 비동기 처리 작업을 수정, 삭제, 추가하기 편하고 유연하다.
  • 비동기 작업 상태를 쉽게 확인할 수 있다.
  • 코드의 유지 보수성이 증가한다.
  • 내부적으로 예외처리 구조가 탄탄하여 오류 처리에 대해 가시적으로 관리할 수 있음

 

async & await
  • async & awaitAwait 키워드는 뒤에 있는 비동기 함수의 실행을 기다린다는 의미, Promise 인스턴스가 반환 되어야지만 앞에다가 사용할 수 있음
  • 조금 더 코드가 직관적임
const a () => { //인자로 콜백함수를 받지 않아도 됨
	return new Promise(resolve=> {
		setTimeout(() => {
			console.log(1)		
			resolve() //실행 순서 보장
		},1000)
	})
}

cost wrap = async () => {
	await a() //await는 반드시 async로 감싸진 함수 내부에 존재해야 하며 promise 반환값을
	b()
}

wrap()

 

728x90