//😀 단순히 콘솔에 각각 A,B,C를 출력하는 3개의 함수가 있다.
function A () {
console.log('A')
}
function B () {
console.log('B')
}
function C () {
console.log('C')
}
//😀 함수는 선언이 아닌 호출 될 때 실행 되므로 아래와 같이 호출 했다면 순서대로 실행 될 것이기 때문에
// 콘솔에 A,B,C가 찍힐 것이다.
A()
B()
C()
function A () {
console.log('A')
}
//😀 B함수는 setTimeout을 통해 1분뒤 콘솔에 B를 출력한다.
function B () {
setTimeout(() => console.log('B'), 1000 * 60)
}
function C () {
console.log('C')
}
//😀 실행 순서를 살펴 보면 먼저 A가 실행이 되고, B가 실행이 되지만 1분후 결과를 출력하므로
//😀 일단 실행이 되고 있는 상태로 다음 코드로 넘어가게 되어 C가 실행이 된다.
A()
B()
C()
//😀 따라서 출력 결과는 아래와 같다.
A, C, 1분후 B
이렇게 실행시간이 다른 함수들을 원하는 처리 순서에 맞게 프로그래밍 하는 것을 '비동기 처리'라고 한다.
function A () {
console.log('A')
}
function B () {
setTimeout(() => console.log('B'), 1000 * 60)
}
function C () {
console.log('C')
}
A()
B()
C()
function A () {
console.log('A')
}
function B (callback) {
setTimeout(() => {
console.log('B')
callback()
}, 1000 * 60)d
}
function C () {
console.log('C')
}
A()
B(C)
new Promise((resolve, reject) => {
// 실행할 코드 작성
})
let likeCoffee = true
const coffee = new Promise((resolve, reject) => {
if (likeCoffee) {
resolve('커피 주문 성공')
} else {
reject('커피 주문 실패')
}
})
let likeCoffee = true
const coffee = new Promise((resolve, reject) => {
if (likeCoffee) {
resolve('커피 주문 성공')
} else {
reject('커피 주문 실패')
}
})
//😀 likeCoffee변수가 true면 Promise객체 내부에서 resolve함수에 '커피주문성공'이라는 매개변수를 전달을 할 것이고
//😀 전달받은 매개 변수를 가지고 then안에서 처리를 해준 것이다.
//😀 만약 likeCoffee변수가 false라면 Promise객체 내부에서 reject함수에 '커피주문실패'라는 매개변수를 전달을 할 것이고
//😀 catch에서 전달받은 매개 변수를 가지고 어떤 처리를 해주면 된다.
coffee
.then(res => console.log(res))
.catch(err => console.log(err))
//😀 coffee라는 함수가 있고, 이 함수는 아래와 같이Prmoise를 리턴한다.
//😀 이렇게 함수가 Prmoise를 리턴하게 하면 함수가 복잡해 진다.
function coffee () {
return new Promise((resolve, reject) => {
if (likeCoffee) {
resolve('커피 주문 성공')
} else {
reject('커피 주문 실패')
}
}
}
//😀 async를 붙이면 자동으로 Promise를 리턴하기 때문에 훨씬 간단하게 적을 수 있다.
//😀 coffee라는 함수는 변수 val이 true면 그냥 '커피주문성공'메시지를 리턴하고, false면 '커피주문실패'메세지를 전달하고 있다.
//😀 하지만 async를 붙였기 때문에 Prmoise를 리턴하는 것이므로 사실상 resolve('커피 주문 성공'), reject('커피 주문 실패')
//😀 를 전달한 것과 똑같다.
async function coffee () {
let val = true
if(val) {
return '커피주문성공'
} else {
return '커피주문실패'
}
}
//😀 따라서 똑같이 then과 catch를 통해 해당 값을 받아올 수 있다.
Coffee()
.then(res => console.log(res)) // '커피주문성공'
.catch(err => console.log(err)) // '커피주문실패'
//😀 그러면 Caffee라는 함수가 있고, 해당 함수 안에서 coffee라는 함수가 호출이 되고, coffee라는 함수가 성공적으로 실행이 되면 커피를 만드는 makeCoffee함수가 있다고 생각해 보자.
//😀 Cafe라는 함수가 있고
async function Cafe () {
const res = Coffee()
const result = makeCoffee(res)
}
//😀 Coffee함수가 있고
async function Coffee () {
let val = true
if(val) {
return '커피주문성공'
} else {
return '커피주문실패'
}
}
//😀 makeCoffee함수가 있다.
async function makeCoffee (res) {
if(res === '커피주문성공') {
return '커피제조중'
} else {
return '주문안들어옴'
}
}
//😀 다시 Cafe함수로 돌아가 보면 내부에서 Coffee함수가 실행이 끝나면 응답을 받아 makeCoffee함수의 매개변수로 전달을 하고 있다.
//😀 이때 사용할 수 있는 것이 await이다. 그냥 await을 붙이면 해당 함수가 실행이 끝날때 까지 기다린다.
//😀 따라서 Coffee함수가 성공적으로 실행이 되면 '커피주문성공'이 res에 전달이 될 것이고
//😀 그 다음 makeCoffee함수가 res를 전달받아 '커피제조중'을 리턴하게 될 것이다.
async function Cafe () {
const res = await Coffee()
const result = await makeCoffee(res)
console.log(result)
}
//🔥 즉 async만을 사용하여 then과 catch를 이용해서 코드 실행순서를 조정하는 비동기 처리를 하던지,
//🔥 아니면 await을 이용하여 비동기 처리를 하면 되는 것이다.