💡 동기적 제어 흐름이란?
- 동기적 제어흐름은 현재 실행중인 코드가 종료되기 전까지 다음 줄의 코드를 실행하지 않는 것을 말한다.
- 분기문, 반복문, 함수 호출이 동기적으로 실행된다.
- 코드의 흐름과 실제 제어 흐름이 동일
- 싱글 스레드 환경에서 메인 스레드를 긴 시간 점유하면, 프로그램을 멈추게 한다.
💡 비동기적 제어 흐름이란?
- 현재 실행중인 코드가 종료되기 전에 다음 라인의 코드를 실행하는 것을 말한다.
- Promise, 콜백 함수, async/await 가 비동기적으로 실행된다.
- 코드흐름과 실제 제어 흐름이 다르다.
- 비동기 작업을 기다리는 동안 메인 스레드는 다른 작업을 처리한다.
💡 자바스크립트에서 비동기 처리
자바스크립트 엔진은 비동기 처리를 제공하지않지만, 정해진 함수를 이용하여 비동기 코드를 활용할 수 있다.
비동기 API로는 setTimeout,XMLHttpRequest,fetch 등의 Web API가 있다.
let promise = new Promise((resolve,reject) => {
if (Math.ramdom() * 10 < 5) {
resolve("성공")
} else {
reject("실패")
}
}
new Promise(callback)
callback 함수는 (resolve,reject) 두 인자를 받는다
Promise가 성공했을 때resolve
를 호출한다.
Promise가 실패했을 때reject
를 호출한다.
promise
.then(result => {...})
.catch(error =>{...})
.finally(() =>{...})
then()
메서드에 성공했을 때 실행할 콜백 함수를 인자로 넘긴다.
catch()
메서드에 실패했을 때 실행할 콜백함수를 인자로 넘긴다.
finally()
메서드는 성공/실패 여부와 상관없이 모두 실행할 콜백 함수를 인자로 넘긴다.
메서드 체인
then/catch
메서드가 또 다른 promise를 리턴하여, 비동기 코드에 순서를 부여한다.
이렇게 동일한 객체에 메서드를 연결할 수 있는 것을 체이닝(chaining)이라 한다.
함수를 호출한 주체가 함수를 끝낸 뒤 자기 자신을 리턴하도록 구현한다.
Promise.all([promise1,promise2,promise3]).then( ).catch( )
Promise.all은 Promise의 배열을 받아 모두 성공 시 각 Promise의 resolved 값을 배열로 반환한다.
async function asyncFunc() {
await 비동기 함수();
}
try-catch 구문으로 비동기 코드 에러처리 가능
async function asyncFunc() {
try{
let data = await 비동기 함수();
return data;
} catch(e) {
...
}
}
GET
: 리소스 정보 얻기POST
: 리소스 생성PUT
: 리소스를 생성하거나 업데이트DELETE
: 리소스 삭제할 때 쓰는 메서드response.headers
: Response 객체의 헤더 정보를 얻을 수 있다.//options에 아무것도 넘기지 않으면 요청은 GET메서드로 진행
let promise = fetch(url, [options])
promise
.then(response => {
if(response.ok){
console.log("요청 성공")
}
}).catch(error => {
console.log("요청 실패")
})