WebProgramming

[WebProgramming] 동기 처리와 비동기 처리

2022. 8. 2. 13:22

안녕하세요, 피터팬입니다!

오늘은 동기 처리와 비동기 처리에 대해 알아볼건데요!

https://peter-coding.tistory.com/264

 

[React] fetch를 통해 HTTP 요청 보내기

안녕하세요, 피터팬입니다! 오늘은 fetch에 대해 배워볼건데요. fetch는 서버에 HTTP요청을 보내 데이터를 받을 수도, 보낼 수도 있습니다. JS는 필요할 때 서버에 네트워크 요청을 보내고 새로운 정

peter-coding.tistory.com

위 fetch글에서, async와 await를 이용해 fetch(비동기 함수)를 동기 처리하도록 바꾸었는데요.

그럼 동기 처리와 비동기 처리가 무엇일까요?

  • 동기 처리 ; 서버에서 요청을 보냈을 때 응답이 돌아와야 다음 동작을 수행할 수 있음
  • 비동기 처리 ; 요청을 보냈을 때 응답 상태와 상관없이 다음 동작을 수행할 수 있음 ex) setTimeout( ), fetch( )

+ promise ; JS 비동기 처리에 사용되는 객체. 데이터를 모두 받아오기 전에 웹에 출력하는 오류 방지

promise기반의 JS를 동기처리 하는 법 ; async()

async function f(){
	return 1;
}

 

await는 Promise가 처리될 때까지 함수 실행을 기다리게 만듭니다.

 

setTimeout()은 기본적으로 함수가 처리되는 동안 다른 함수를 실행하는 비동기함수입니다.

그런데, 우리가 원하는 setTimeout()의 기능은 시간을 기다리는 것으로 처리되는 동안 다른 함수를 실행하지 않는 동기 처리를 원하겠죠?
그래서 async와 await를 이용하여 동기 처리할 수 있도록 변환해주는 것입니다.

const func = () => {
    setTimeout(() => {
    	console.log("Hello");
    }, 1000);
}
func();
const func = async () => {
	for (let i = 0; i < 5; i++) {
    	console.log("Hello");
    	await new Promise((resolve) => setTimeout(resolve, 1000));
	}
};
func();

위의 식과 아래 식의 차이가 보이시나요?

아래 식은 async를 함수에 붙혀주었고, await와 new Promise로 동기처리를 해주었습니다.

위의 식은 실행 후 1초 후 Hello 5개가 한번에 찍히지만, 아래 식은 실행 후 1초 간격으로 Hello가 5번 찍힐 것입니다.

 

 

async와 await를 사용한 예시

더보기
async function showAvatar() {

  // JSON 읽기
  let response = await fetch('/article/promise-chaining/user.json');
  let user = await response.json();

  // github 사용자 정보 읽기
  let githubResponse = await fetch(`https://api.github.com/users/${user.name}`);
  let githubUser = await githubResponse.json();

  // 아바타 보여주기
  let img = document.createElement('img');
  img.src = githubUser.avatar_url;
  img.className = "promise-avatar-example";
  document.body.append(img);

  // 3초 대기
  await new Promise((resolve, reject) => setTimeout(resolve, 3000));

  img.remove();

  return githubUser;
}

showAvatar();

결과 ; await new Promise()문을 실행하고 3초를 기다리고 img.remove()문을 실행함

 

 

 


Reference

https://ko.javascript.info/async-await

 

async와 await

 

ko.javascript.info

 

 

저작자표시 (새창열림)

'WebProgramming' 카테고리의 다른 글

[WebProgramming] VS Code 확장형 프로그램 정리 <작성 중>  (0) 2022.07.04
'WebProgramming' 카테고리의 다른 글
  • [WebProgramming] VS Code 확장형 프로그램 정리 <작성 중>
피터s
피터s
1년차 프론트엔드 개발자입니다 😣 아직 열심히 배우는 중이에요! 리액트를 하고있어요 :) - gueit214@naver.com - https://github.com/gueit214
피터s
피터의 성장기록
피터s
전체
오늘
어제
  • 분류 전체보기 (200)
    • 코딩 테스트 (25)
      • 프로그래머스 (16)
      • LeetCode (8)
      • 백준 (1)
    • 개발 독서 일지 (1)
    • 기업 분석 (4)
    • 개발 일지 (19)
      • 최신기술 도전기 (1)
      • 에러 처리 (5)
      • 개발 일지 (12)
    • 개발 일상 (36)
      • 개발 회고 (22)
      • 개발 이야기 (12)
      • 개발 서적 (1)
    • 취업 관련 지식 (11)
    • 알고리즘 (17)
    • WebProgramming (84)
      • WebProgramming (8)
      • HTML (5)
      • CSS (8)
      • JS (21)
      • React (40)

블로그 메뉴

  • About
  • 2022년 개발 성장기
  • 앞으로의 계획
  • github
  • 일상 blog

공지사항

인기 글

태그

  • KAKAO BLIND
  • 해커톤
  • lv3
  • dfs
  • BFS
  • 카카오 채용연계형 인턴십
  • LV2
  • 구름
  • 구름톤
  • Kakao Tech Internship
  • 누적합
  • Union-find
  • 1년 회고
  • 1일 1커밋 후기
  • 카카오
  • Retry
  • 개발 일상
  • 개발 is life
  • 개발 회고
  • 함수
  • 반복문
  • 스터디 후기

최근 댓글

최근 글

hELLO · Designed By 정상우.
피터s
[WebProgramming] 동기 처리와 비동기 처리
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.