일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바스크립트
- 음악 url 파일 다운로드
- api 요청 수 제한
- TypeORM
- 모던 자바스크립트
- 우아한테크코스
- 프로그래머스
- compateto
- redis
- api 비동기처리
- concurrency limit
- 타입스크립트
- 코멘토 #코멘토실무PT #실무PT후기 #실무강의 #리액트강의 #웹프로그래밍 #react #웹개발실무
- invalid_grant
- bucket4j
- AWS
- 프리코스
- 파일 url
- 프론트엔드 과제
- 스프링부트
- Dev-Matching
- this
- NestJS
- Deep Dive
- 프론트엔드
- 유효시간 설정 url
- oauth
- 검색
- 딥다이브
- 우아한 테크코스
- Today
- Total
개발 알다가도 모르겠네요
async 함수의 세부적인 내용 본문
// 1) Function Declaration
async function example1(a, b) {
return a + b;
}
// 2-1) Function Expression(Named)
const example2_1= async function add(a, b) {
return a + b;
};
// 2-2) Function Expression(Anonymous)
const example2_2 = async function(a, b) {
return a + b;
};
// 3-1) Arrow Function
const example3_1 = async (a, b) => {
return a + b;
};
// 3-2) Arrow Function(shortened)
const example3_2 = async (a, b) => a + b;
//즉시실행함수(Immediately-invoked function expression, IIFE)
(async function print(sentence) {
console.log(sentence);
return sentence;
}('I love JavaScript!'));
(async function (a, b) {
return a + b;
}(1, 2));
(async (a, b) => {
return a + b;
})(1, 2);
(async (a, b) => a + b)(1, 2);
성능 심화 내용
async function getResponses(urls) {
for(const url of urls){
const response = await fetch(url);
console.log(await response.text());
}
}
이 getResponses 함수는 urls라는 파라미터로, 여러 개의 URL들이 있는 배열을 받아서, 순서대로 각 URL에 리퀘스트를 보내고, 그 리스폰스의 내용을 출력하는 함수입니다.
그런데 이 코드는 이전 URL에 리퀘스트를 보내고 리스폰스를 받아서 출력하고 나서야, 다음 URL에 대한 리퀘스트를 보낼 수 있습니다.
즉, 순차적인 작업 처리를 한다는 점입니다. 왜냐하면 이전 URL에 대해서 await 문이 붙은 Promise 객체가 fulfilled 상태가 될 때까지는 그 다음 URL에 대한 작업들이 시작될 수 없기 때문입니다.
만약 리스폰스의 내용의 순서가 중요하지 않은 경우라면 현재 코드를 아래처럼 바꿀 수 있습니다.
async function fetchUrls(urls){
for(const url of urls){
(async () => { // 추가된 부분!
const response = await fetch(url);
console.log(await response.text());
})(); // 추가된 부분!
}
}
각 url에 리퀘스트를 보내고 리스폰스를 받는 코드를, 별도의 즉시실행되는 async 함수로 감싸줬습니다.
이렇게 코드를 고치면 일단 각 URL에 대해서 fetch 함수를 실행해서 리퀘스트를 보내는 것을 순서대로 바로 실행해버립니다.
이렇게 코드를 쓰면 일단 모든 URL에 대한 리퀘스트를 쭉 보내버리고, 먼저 리스폰스가 오는 순서대로 그 내용이 출력됩니다.
async 함수가 리턴하는 Promise 객체
Promise 객체를 리턴하는 경우
async 함수 안에서 Promise 객체를 리턴하는 경우에는 해당 Promise 객체와 동일한 상태와 작업 성공 결과(또는 작업 실패 정보)를 가진 Promise 객체를 리턴합니다.(그냥 해당 Promise 객체를 리턴한다고 봐도 괜찮습니다.)
async function fetchAndPrint() {
return new Promise((resolve, reject)=> {
setTimeout(() => { resolve('abc'); }, 4000);
});
}
fetchAndPrint();
Promise 객체 이외의 값을 리턴하는 경우
async 함수 내부에서 Promise 객체 이외에 숫자나 문자열, 일반 객체 등을 리턴하는 경우에는,
fulfilled 상태이면서, 리턴된 값을 작업 성공 결과로 가진 Promise 객체를 리턴합니다.
async function fetchAndPrint() {
return 3;
}
fetchAndPrint();
아무 값도 리턴하지 않는 경우
async function fetchAndPrint() {
console.log('Hello Programming!');
}
fetchAndPrint();
이 경우에는 fulfilled 상태이면서, undefined를 작업 성공 결과로 가진 Promise 객체가 리턴됩니다.
async함수 내부에서 에러가 발생했을 때
async function fetchAndPrint() {
throw new Error('Fail');
}
fetchAndPrint();
async 함수 안에서 에러가 발생하면, rejected 상태이면서, 해당 에러 객체를 작업 실패 정보로 가진 Promise 객체가 리턴됩니다.
'웹 > Javascript' 카테고리의 다른 글
자바스크립트의 유용한 내부 기능 (0) | 2021.08.04 |
---|---|
자바스크립트 ES6 기본 문법을 알아보자 (0) | 2021.08.02 |
async와 await를 간단하게 알아보자 (0) | 2021.07.30 |
자바스크립트의 동작 원리 (0) | 2021.07.26 |
객체 지향 프로그래밍의 4가지 특징 (0) | 2021.07.23 |