일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
- 타입스크립트
- invalid_grant
- Dev-Matching
- 딥다이브
- 코멘토 #코멘토실무PT #실무PT후기 #실무강의 #리액트강의 #웹프로그래밍 #react #웹개발실무
- NestJS
- 검색
- TypeORM
- compateto
- 파일 url
- 음악 url 파일 다운로드
- 우아한 테크코스
- api 요청 수 제한
- AWS
- this
- oauth
- api 비동기처리
- 유효시간 설정 url
- 우아한테크코스
- 스프링부트
- bucket4j
- Deep Dive
- 자바스크립트
- 프론트엔드 과제
- 프로그래머스
- 프리코스
- 모던 자바스크립트
- 프론트엔드
- concurrency limit
- redis
- Today
- Total
개발 알다가도 모르겠네요
async와 await를 간단하게 알아보자 본문
async function fetchAndPrint() {
console.log(2);
const response = await fetch('https://jsonplaceholder.typicode.com/users');
console.log(7);
const result = await response.text();
console.log(result);
}
console.log(1);
fetchAndPrint();
console.log(3);
console.log(4);
console.log(5);
console.log(6);
사실 fetchAndPrint 함수를 언뜻 보면, 비동기 실행 함수처럼 생기지 않았습니다.
오히려 코드가 등장하는 순서대로 실행될 것처럼 생겼는데 이건 의도된 것입니다.
왜냐하면 async/await 구문 자체가 기존의 Promise 객체를 사용하는 코드(Promise Chaining)를
(1) 개발자가 더 편하게 작성할 수 있도록 하고
(2) 코드의 가독성을 높이기 위해서
도입된 일종의 Syntactic sugar(기존 문법을 더 편하게 사용할 수 있도록 하는 문법적 장치)에 해당하기 때문입니다.
사실 우리에게는 이때까지 배웠던 것처럼
- 전통적인 형식의 비동기 실행 함수에 콜백을 바로 전달하거나,
- Promise 객체 뒤에 .then 메소드를 붙이는 것보다는
그냥 코드를 차례대로 써나가는 것이 더 익숙한 방식입니다.
그리고 바로 async/await 구문이 Promise 객체를 우리에게 이미 익숙한 동기 실행 코드 방식으로 다룰 수 있게 해주는 문법인 겁니다.
하지만 동기 실행 코드처럼 보인다고 해서 정말로 동기 실행되는 것은 아닙니다.
코드에서 async/await이 보인다면 사실 비동기 실행되는 코드가 있다는 걸 반드시 기억해야 합니다.
1
2
3
4
5
6
7
[리스폰스의 내용]
사실 위 코드의 원래 모습은 아래와 같다고 할 수 있습니다.
function fetchAndPrint() {
console.log(2);
fetch('https://jsonplaceholder.typicode.com/users')
.then((response) => {
console.log(7);
return response.text();
})
.then((result) => { console.log(result); });
}
console.log(1);
fetchAndPrint();
console.log(3);
console.log(4);
console.log(5);
console.log(6);
정리하면
async 함수 안의 코드가 실행되다가 await을 만나면, 일단 await 뒤의 코드가 실행되고,
코드의 실행 흐름이 async 함수 바깥으로 나가서 나머지 코드를 다 실행합니다.
물론 함수 바깥에 더 이상 실행할 코드가 없을 수도 있습니다.
어느 경우든 그 이후로는, await 뒤에 있던 Promise 객체가 fulfilled 상태가 되기를 기다립니다.
그리고 기다리던 Promise 객체가 fulfilled 상태가 되면 await이 Promise 객체의 작업 성공 결과를 리턴하는 겁니다.
'웹 > Javascript' 카테고리의 다른 글
자바스크립트 ES6 기본 문법을 알아보자 (0) | 2021.08.02 |
---|---|
async 함수의 세부적인 내용 (0) | 2021.07.30 |
자바스크립트의 동작 원리 (0) | 2021.07.26 |
객체 지향 프로그래밍의 4가지 특징 (0) | 2021.07.23 |
여러 개의 Promise 객체를 다뤄야 할 때 사용되는 Promise의 메소드 (0) | 2021.07.21 |