๋ชฉ์ฐจ
๋๊ธฐ์ ์ฒ๋ฆฌ
์์ฒญ์ ๋ณด๋ธ ํ, ํด๋น ์์ฒญ์ ์๋ต ๋ฐ์ ๋ค์ ๋์ ์คํ
(ํ ์ค ์๋ฃ ํ ๋ค์ ์ค ์ฒ๋ฆฌ)
๋น๋๊ธฐ ์ฒ๋ฆฌ
์์ฒญ ๋ณด๋ธ ํ, ์๋ต์ ์๊ด์์ด ๋ค์๋์ ์คํ
(ํ ์ค ์๋ฃ ์๊ด์์ด ๋ค์ ์ค ์ฒ๋ฆฌ)
๋น๋๊ธฐ์ ์ฒ๋ฆฌ?
๋๋ถ๋ถ์ ์ธ์ด๋ ๋๊ธฐ์ ์ฒ๋ฆฌ๋ฅผ ์งํฅํ๋ค.
JS์ ๊ฒฝ์ฐ์๋ ์คํ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ฉด
๊ธฐ๋ค๋ฆด ํ์์์ด ๋ค์์ผ๋ก ๋์ด๊ฐ๋๋ก
๋น๋๊ธฐ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๊ฒ ๋์ด ์๋ค.
์ ๋ฆฌํ๋ฉด
JS๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋๊ธฐ์ ์ฒ๋ฆฌ
์ผ๋ถ ๊ธฐ๋ฅ ๋น๋๊ธฐ์ ์ฒ๋ฆฌ ์ถ๊ฐ ์ ๊ณต
๋น๋๊ธฐ ์ฒ๋ฆฌ ์ง์ ๊ธฐ๋ฅ
Rest API ์์ฒญ
ํ์ผ / DB ์ฒ๋ฆฌ
ํ์ด๋จธ, ์ํธํ / ๋ณตํธํ
๋น๋๊ธฐ ์์
setTimeout ํจ์
setTimeout(functoin, milliseconds)
- millisecons : ms ๋งํผ ๊ธฐ๋ค๋ฆฌ๊ธฐ
- function : ms๋งํผ ๊ธฐ๋ค๋ฆฐ ํ, ํธ์ถํ ํจ์
console.log("Hello")
setTimeout(() => {console.log("My name is")}, 3000)
console.log("Kassid")
>>>
Hello
Kassid
My name is
์์ ์ฌ์ง์ ๋ณด๋ฉด
2๋ฒ ์งธ ์ค์ด ์คํ์ด ๋๊ณ ์๋ฃ๊ฐ ๋์ง ์์์ง๋ง
3๋ฒ ์งธ ์ค์ด ์คํ์ด ๋ ๋ชจ์ต๋๋ค.
(2๋ฒ ์งธ ์ค์ด ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ ํจ์์ด๊ธฐ ๋๋ฌธ)
๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฌธ์ ์ ?
์์๋ก
Rest API๋ฅผ ํธ์ถํด์ ํด๋ผ์ด์ธํธ์์ ์๋ฒ์ ์์ฒญ์ ํ ํ
๊ทธ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ๋ค์ ์ฝ๋๋ฅผ ์งํํด์ผํ๋๋ฐ
๋น๋๊ธฐ ์ฒ๋ฆฌ๋ก ์ธํด ๋ค์ ์ฝ๋๊ฐ ์คํ์ด ๋๋ฉด
๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค..!!
ํด๊ฒฐ๋ฐฉ๋ฒ
1. ์ฝ๋ฐฑํจ์ callback
JS๋ first-class function์ด๋ค.
์ฆ,
ํจ์ ์์ฒด๋ฅผ ๋ณ์์ ์ ์ฅ ๊ฐ๋ฅํ๊ณ
ํจ์์ ์ธ์์ ๋ค๋ฅธ ํจ์๋ฅผ ์ธ์๋ก ๋ฃ์ ์ ์๋ค.
๋ํ return๊ฐ์ผ๋ก ํจ์๋ฅผ ์ ๋ฌํ ์ ์๋ค.
function func1(callback) { //ํจ์๋ฅผ ์ธ์๋ก ์ ๋ฌ
setTimeout(()=>{
console.log("func1")
callback() //์ธ์๋ก ๋ฐ์์จ ํจ์ ์คํ
},100)
}
function func2() {
console.log("func2")
}
func1(func2)
>>>
func1
func2
ํ์ง๋ง ์ด๋ ๊ฒ ๋๋ฉด
์ฝ๋ฐฑํจ์ ์์ ์ฝ๋ฐฑํจ์ ์์ ์ฝ๋ฐฑํจ์ ,,,,,
์ด๋ ๊ฒ ๊ณ์ ๋ค์ด๊ฐ์ผํ๋ค.
2. Promise
callbackํจ์์ ๋จ์ ์ ๊ทน๋ณตํ๊ธฐ ์ํด ๊ณ ์๋ ๋ฌธ๋ฒ์ด๋ค.
1)
new๋ก Promise์์ฑ์ํ๋ค.
2)
Promise ๊ฐ์ฒด์ ์ ๋ฌ๋๋ ํจ์๋ executor ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ด ํจ์๋ new Promise๊ฐ ๋ง๋ค์ด์ง ๋ ์๋์ผ๋ก ์คํ๋๊ณ
resolve, reject๋ผ๋ ๋ ๊ฐ์ ํจ์๋ฅผ ์ธ์๋ก ๋ฐ์์ ๋น๋๊ธฐ ์ฒ๋ฆฌํจ์๋ฅผ ์คํํ๋ค.
3)
executor๋ฅผ ํตํด ๋น๋๊ธฐ ์ฒ๋ฆฌ ํ
resolve, reject ํจ์ ํธ์ถ
(resolve : ์ฑ๊ณต ์ / reject : ์คํจ ์)
then ๋ฉ์๋
์ฑ๊ณต, ์คํจ ์์ ์ํ ์์ ์ ์ &
promise ์ฝ๋ ์คํ
promise.then(successCallback, failCallback)
const func = new Promise(
(resolve, reject) => { //์ฑ๊ณต, ์คํจ ํจ์์ธ์๋ก ๋ฐ๊ธฐ
setTimeout(() => { //๋น๋๊ธฐ ํจ์ ์คํ
let num = 10
if (num > 9) {
resolve(num) //successCallback
} else {
reject("error") //failCallback
}
}, 1000);
}
)
func.then((item) => { //successCallback
console.log('success', item)
}, (err) => { //failCallback
console.log(err)
})
>>>
success 10
๋ง์ฝ then ๋ฉ์๋์ ํ๋๋ง ์ ์ธํ๋ค๋ฉด
successCallback ๋์๋ง ์ ์ธํ ์ ์ด๋ค.
func.then((item) => { //successCallback
console.log('success', item)
})
๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๋ฒ์๋
Promise์ ์ ๋ฌ๋ ํจ์์ ๋ํด์๋ง ์ด๋ค.
const func = new Promise(
(resolve, reject) => { //์ฑ๊ณต, ์คํจ ํจ์์ธ์๋ก ๋ฐ๊ธฐ
setTimeout(() => { //๋น๋๊ธฐ ํจ์ ์คํ
let num = 10
if (num > 9) {
resolve(num) //successCallback
} else {
reject("error") //failCallback
}
}, 1000);
}
)
func.then((item) => { //successCallback
console.log('success', item)
}, (err) => { //failCallback
console.log(err)
})
console.log("Hello")
>>>
Hello
success 10
๋ฐ๋ผ์ ์์ ์์์์
Hello๊ฐ ๋จผ์ ์ถ๋ ฅ์ด ๋๋ ๊ฒ์ด๋ค.
๋ง์ฝ ์์ฐจ์ ์ผ๋ก ๊ณ์ํด์ ์ด์ด์ ธ์ผ ํ๋ ๊ฒฝ์ฐ
์๋์ ๊ฐ์ด
.then์ ๋ถ์ฌ์ฃผ๋ฉด ๋๋ค.
const func = new Promise(
(resolve, reject) => { //์ฑ๊ณต, ์คํจ ํจ์์ธ์๋ก ๋ฐ๊ธฐ
setTimeout(() => { //๋น๋๊ธฐ ํจ์ ์คํ
let num = 10
if (num > 9) {
resolve(num) //successCallback
} else {
reject("error") //failCallback
}
}, 1000);
}
)
func.then((item) => { //successCallback
console.log('success', item)
}, (err) => { //failCallback
console.log(err)
}).then(()=>{
console.log("Hello")
})
>>>
success 10
Hello
์ ๋ฆฌํ๋ฉด
๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ํจ์๊ฐ ์ค๊ฐ์ ์๊ณ ,
์ด ํจ์๊ฐ ๋๋ ๋ค์
์ด์ด์ ธ์ผ ํ๋ ์ฝ๋๋ค์ ๊ฒฝ์ฐ์๋
Promise๋ฅผ ์ด์ฉํด์
์์ ๊ด๋ฆฌ๋ฅผ ํ๋ ๊ฒ์ด๋ค.
'๐ | WEB DEV > Vanilla JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JS_๋ฌธ๋ฒ (7)_DOM / BOM (0) | 2022.02.23 |
---|---|
JS_๋ฌธ๋ฒ (6)_promise ๋ฉ์๋(catch, finally, all, race ๋ฑ ) (0) | 2022.02.20 |
JS_๋ฌธ๋ฒ (4)_Scope (0) | 2022.02.17 |
JS_๋ฌธ๋ฒ (3)_ํธ์ด์คํ (0) | 2022.02.16 |
JS_๋ฌธ๋ฒ (2)_๊ตฌ์กฐ ๋ถํด ํ ๋น2, Rest-Spread ํ๋ผ๋ฏธํฐ (0) | 2022.02.15 |
๋๊ธ