์ฝ๋ฐฑํจ์
๋งค๊ฐ๋ณ์๋ก ํจ์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํด์ ํธ์ถ ํจ์ ๋ด์์ ๋งค๊ฐ๋ณ์ ํจ์๋ฅผ ์คํํ๋ ๊ฒ
์ฝ๋ฐฑํจ์๋ ํ๋ผ๋ฏธํฐ๋ก ํจ์ ์์ฒด๋ฅผ ์ ๋ฌ ํ๋๊ฒ
function sayHello(name, callback){
const words = `์๋
ํ์ธ์ ๋ด ์ด๋ฆ์ ${name} ์
๋๋ค.`
callback(words) // ๋งค๊ฐ๋ณ์ ์ฝ๋ฐฑ ํจ์ ํธ์ถ
}
sayHello('๋ง๋ฃจ', function printing(name){
console.log(name) // ์๋
ํ์ธ์ ๋ด ์ด๋ฆ์ ๋ง๋ฃจ ์
๋๋ค.
})
์ฝ๋ฐฑํจ์ ์ฌ์ฉ ์์น
1. ์ต๋ช
ํจ์
์ฝ๋ฐฑํจ์๋ ํธ์ถ ํจ์์ ์ผํ์ฉ์ผ๋ก ์ฌ์ฉ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ์ฝ๋๊ฐ ๊ฒฐ์ฑ์ ์ํด ์ด๋ฆ ์๋ "์ต๋ช
ํจ์"๋ฅผ ์ฌ์ฉํ๋ค.
sayHello('๋ง๋ฃจ', funcion (name){
console.log(name)
})
- ๊ฐ๋ฐ์์ ์ค์๋ก ์ธํ ํจ์ ์ด๋ฆ ์ถฉ๋ ๋ฐฉ์ง
let add =10
function sum(x,y,callback){
callback(x+y)
}
sum(1,2,function add(result){
console.log(result)
})
console.log(add) // ๋ณ์ -> ํจ์๊ฐ ๋์ด๋ฒ๋ฆฐ๋ค.
2. ํ์ดํ ํจ์๋ชจ์์ ์ฝ๋ฐฑ
function sayHello(callback){
var name = 'sunja'
callback(name)
}
sayHello((name)=>{
console.log('Hello,' + name)
})
3. ํจ์์ ์ด๋ฆ์ ๋๊ธฐ๊ธฐ
์ฝ๋ฐฑํจ์๊ฐ ์ผํ์ฉ์ด ์๋ ์ฌ๋ฌํธ์ถ ํจ์์ ์ฌํ์ฉ์ผ๋ก ์์ฃผ ์ด์ฉ๋ ๊ฒฝ์ฐ ๋ณ๋๋ก ํจ์๋ฅผ ์ ์ํ๊ณ ํจ์์์ด๋ฆ๋ง ํธ์ถ ํจ์์ ์ธ์์ ์ ๋ฌํ๋ ์์ผ๋ก ๊ฐ๋ฅํ๋ค.
function greet(name){
console.log('hello'+ name)
}
function sayHello(callback){
var name ="choco"
callback(name)
}
function sayHello2(callback){
var name ="sunja"
callback(name)
}
sayHello(greet) // hello choco
sayHello2(greet) // hello sunja
์ฌ๋ฌ๊ฐ์ง ํจ์ ํํ๋ฅผ ๋ค์ํ๊ฒ ์ ๋ฌ ๊ฐ๋ฅ
function introduce(last, first, callback){
var fullName = last + first
callback(fullName)
}
function say_hello(name){
console.log('์๋
ํ์ธ์'+name + '์
๋๋ค.')
}
function say_bye(name){
console.log('์๋
ํ ๊ณ์ธ์' + name + ์
๋๋ค.)
}
introduce('ํ','๊ธธ๋',say_hello)
introduce('ํ','๊ธธ๋',say_bye)
์ฝ๋ฐฑ ํจ์ ํ์ฉ ์ฌ๋ก
1. ์ด๋ฒคํฐ ๋ฆฌ์ค๋๋ก ์ฌ์ฉ
addEventListner
๋ ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ์คํํ๋ ๋ฉ์๋
ํด๋ฆญ๊ณผ ๊ฐ์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ฑ๋กํ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ก ์ฝ๋ฐฑํจ์๊ฐ ์ฐ์ธ๋ค.
let button = document.getElementById('button')
button.addEventListener('click',function(){
console.log('Button Clicked')
})
2. ๊ณ ์ฐจํจ์์ ์ฌ์ฉ
๊ณ ์ฐจํจ์ : ํจ์๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ฐ๊ฑฐ๋ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ก ๋ฐํํด ์ฃผ๋ ๋ฉ์๋
let numbers = [1,2,3,4,5]
let doubled = []
numbers.forEach(function(num){
doubled.push(num*2)
})
console.log(doubled) // [2,4,6,8,10]
3. Ajax ๊ฒฐ๊ณผ๊ฐ์ ๋ฐ์ ๋ ์ฌ์ฉ
์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ์ฌ์ฉ ํ๋ fetch๋ฉ์๋์ ์๋ฒ์์ฒญ์ ๊ฒฐ๊ณผ๊ฐ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฝ๋ฐฑํจ์๊ฐ ์ฌ์ฉ๋๋ค.
fetch("https://jsonplaceholder.typicode.com/users")
.then(function (response) {
// fetch ๋ฉ์๋๊ฐ ์ฑ๊ณตํ๋ฉด ์ฝ๋ฐฑ ํจ์๋ก response ์ธ์๋ฅผ ๋ฐ์
return response.json(); // response ๊ฐ์ฒด์ json ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ JSON ๋ฐ์ดํฐ๋ฅผ ๋ฐํ
})
.then(function (data) {
// json ๋ฉ์๋๊ฐ ์ฑ๊ณตํ๋ฉด ์ฝ๋ฐฑ ํจ์๋ก data ์ธ์๋ฅผ ๋ฐ์
console.log(data);
})
4. ํ์ด๋จธ ์คํ ํจ์
setTimeout
์ด๋ setInterval ๊ณผ ๊ฐ์ ํ์ด๋จธํจ์์์ ์ผ์ ํ ์๊ฐ๋ง๋ค ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ์ฉ๋
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ฐฑํจ์ ์ฃผ์์
this๋ฅผ ์ฌ์ฉํ ์ฝ๋ฐฑํจ์
์์ ์ ์ ๋ฌ๋ฐ์ ํจ์์ ์ํด ํธ์ถ๋๋๋ฐ, ์ด๋ ์ฝ๋ฐฑ ํจ์ ๋ด๋ถ์์์ this๋ ํด๋น ์ฝ๋ฐฑ ํจ์์ ์ ์ด๊ถ์ ๋๊ฒจ๋ฐ์ ํจ์๊ฐ ์ ์ํ ๋ฐ์๋ฐ๋ฅด๋ฉฐ, ์ ์ํ์ง ์์ ๊ฒฝ์ฐ์๋ ์ ์ญ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค.
let userData = {
signUp: '2021-4-06 12:00:00',
name: 'Not Set',
setName: function(firstName, lastName) {
this.name = firstName + ' ' + lastName;
}
}
function getUserName(firstName, lastName, callback) {
callback(firstName, lastName);
}
// ํด๋น ์ฝ๋ฐฑํจ์๋ userData.setName๊ณผ ์๋ฌด๋ฐ ๊ด๊ณ๊ฐ ์๋ ํจ์ ํํ๋ง ๋น์ทํ ๋
๋ฆฝ์ ์ธ ํจ์์ด๋ค.
getUserName('ํ', '๊ธธ๋', function(firstName, lastName) {
this.name = firstName + ' ' + lastName;
});
console.log('1: ', userData.name); // Not Set
console.log('2: ', window.name); // ํ ๊ธธ๋
๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ์ ์ผ๋ก ์ฝ๋ฐฑ ํจ์๋ฅผ ํธ์ถํ๋ ํจ์๋ค์ ๋ณ๋๋ก this๋ฅผ ์ค์ ํ์ง ์์ผ๋ฏ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ญ ๊ฐ์ฒด๊ฐ ๋ฐ์ธ๋ฉ ๋๋ ๊ฒ์ด๋ค.
this ํด๊ฒฐ ๋ฐฉ์
- call, bind,apply ๋ฉ์๋ ์ฌ์ฉ
์ฐธ์กฐํ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐ๋ก ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ๊ณ , ์ฝ๋ฐฑ ํจ์ ๋ด์์ call(), apply() ๋ฉ์๋๋ฅผ ํตํด ์ฝ๋ฐฑ ํจ์๊ฐ ์ฐธ์กฐํ ๊ฐ์ฒด๋ฅผ ์ง์
- ํ์ดํ ํจ์ ์ฌ์ฉ
ํ์ดํ ํจ์๋ฅผ ์ฌ์ฉํด์ this๋ฅผ ์ธ๋ถ ํจ์์ this์ ๋์ผํ๊ฒ ์ ์งํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ํ์ดํ ํจ์๋ ์์ ๋ง์ this๋ฅผ ๊ฐ์ง์ง ์๊ณ ์์ ์ค์ฝํ์ this๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ์ ์ญ ๊ฐ์ฒด๋ฅผ ๋ฌด์ํ๊ณ ๋ฌด์กฐ๊ฑด ์์ ์ ๋ค๊ณ ์๋ ์์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
์ฝ๋ฐฑ ์ง์ฅ
์ฝ๋ฐฑ ์ง์ฅ์ด๋ ํจ์์ย ๋งค๊ฐ๋ณ์๋ก ๋๊ฒจ์ง๋ ์ฝ๋ฐฑ ํจ์๊ฐ ๋ฐ๋ณต๋์ด ์ฝ๋์ ๋ค์ฌ์ฐ๊ธฐ ์์ค์ด ๊ฐ๋นํ๊ธฐ ํ๋ค์ด์ง ์ ๋๋ก ๊น์ด์ง๋ ํ์
์ฝ๋ฐฑ ์ง์ฅ์ ํด๊ฒฐ ํ๋ ๋ฐฉ๋ฒ ๋น๋๊ธฐ
๋๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฑ๊ธ ์ค๋ ๋ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ ํ ๋ฒ์ ํ๋์ ์์
๋ง ์ํํ ์ ์๋ค. ์ด์ ์์
์ด ์๋ฃ๋์ด์ผ ์์
์ ์ํํ ์ ์์ผ๋ฉฐ ํจ์์ ์ฝ๋๋ค์ด ์์์ ์๋๋ก ์ฐจ๋ก๋ก ๋์ํ๋ ๋ฐฉ์
๊ฐ๋จํ๊ณ ์ง๊ด์ ์ด์ง๋ง ์์
์ด ์ค๋๊ฑธ๋ฆฌ๊ฑฐ๋ ์๋ต์ด๋ฆ์ด์ง๋ค.
๋น๋๊ธฐ?
ํ์ฌ ์คํ์ค์ธ ์์
์ ๋ฉ์ถ์ง ์๊ณ ๋ค๋ฅธ ์์
์ ๋ณ๋ ฌ์ ์ผ๋ก ์ํํ๋ ๊ฒ์ ๋งํ๋ค.
์ฌ๋ฌ ์์
(task)์ด ์์๋ ๋น๋๊ธฐ์ ์ผ๋ก ์ํํ๋ฉด ์์
์ ๋์์ ํ๋ฒ์ ์ํํ ์ ์๋ค.
๋น๋๊ธฐ๋ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์์
์ ๋ค๋ฅธ ๊ณณ์ ์ธ๊ฐํ์ฌ ์ฒ๋ฆฌ๋๊ฒ ํ๊ณ , ๊ทธ ์์
์ด ์๋ฃ๋๋ฉด ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฐ์ ์คํํ๋ ๋ฐฉ์์ผ๋ก ์ฝ๊ฒ ๋งํด ์์
์ ๋ฐฑ๊ทธ๋ผ์ด๋์ ์์ฒญํ์ฌ ์ฒ๋ฆฌ๋๊ฒ ํ์ฌ ๋ฉํฐ๋ก ์์
์ ๋์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ผ๋ก ๋ณด๋ฉด๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋น๋๊ธฐ ํน์ง
๋น๋๊ธฐ ์ฒ๋ฆฌ ์ ์ฉ์ฑ
๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ์์
์ ํ๊ฒ ๋๋ฉด ๊ธฐ๋ค๋ฆฌ๋ ๋์ ๋ค๋ฅธ ์์
์ ํ ์ ์์ผ๋ฏ๋ก ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
๋๊ท๋ชจ ํธ๋ํฝ์์๋ ์์ ์ ์ผ๋ก ๋์ํ ์ ์๋ ์น์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค์ ์๋ค.
Ajax
์๋ฒ๋ก๋ถํฐ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๋ ๋์์๋ ์ฌ์ฉ์์ ์ธํฐ๋ฅ์
์ ์ ์ง ํ ์ ์์ผ๋ฏ๋ก ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์ ์ํฌ์ ์๋ค.
// fetch ํจ์์ URL ์ ๋ฌ
fetch("https://jsonplaceholder.typicode.com/todos/1")
.then(function(response) {
return response.json(); // ์๋ต์ JSON ํ์์ผ๋ก ๋ณํ
})
.then(function(data) {
console.log(data); // JSON ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ
})
.catch(function(error) {
console.error(error); // ์๋ฌ๋ฅผ ์ถ๋ ฅ
});
๋น๋๊ธฐ ๋ณ๋ ฌ ์ฒ๋ฆฌ ์๋ฆฌ
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฑ๊ธ ์ค๋ ๋ ์ธ์ด ์ด์ง๋ง ์์
(task)๋ค์ ๋์์ ์ฒ๋ฆฌ ๊ฐ๋ฅํ๊ฒ ํ๋ ์ด์ ๋
๋ธ๋ผ์ฐ์ ๋ผ๋ ์ํํธ์จ์ด๊ฐ ๋ฉํฐ์ค๋ ๋ ์ด๊ธฐ๋๋ฌธ์ ๋ฉ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ง ์๊ณ ๋ค๋ฅธ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ web API์์
์ ์ฒ๋ฆฌํ์ฌ ๋์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง ๋ฉํฐ์ค๋ ๋ฉ์ ์๋๋ค.
web api ๋ง ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌ๋๊ณ ๊ทธ์์ ์ฝ๋ฐฑํจ์๋ ์ฝ์คํ์ ๋ค์ด๊ฐ ์ฑ๊ธ์ค๋ ๋๋ก ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๋ธ๋ผ์ฐ์ ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ
HTML ๋งํฌ์
์ธ์ด์์ ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ
<script>
ํ๊ทธ์ async
์ defer
์ ํค์๋๋ฅผ ๋ถํ๋ฉด๋๋ค
async
: ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ด์ง๋ฅผ ํ์ฑ๋๋ ๋์์๋ ์คํฌ๋ฆฝํธ๊ฐ์คํ๋จ
defer
: ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ด์ง์ ํ์ฑ์ ๋ชจ๋ ๋๋ด๋ฉด ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋จ
- ๋ชจ๋ ๋ช
์ ํ์ง ์์์ ๊ฒฝ์ฐ: ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ด์ง๋ฅผ ํ์ฑํ๊ธฐ ์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ์ ธ์ ๋ฐ๋ก ์คํ
๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ
๋น๋๊ธฐ์ ์ฝ๋ฐฑํจ์
๋น๋๊ธฐ ๋ฐฉ์์ ์์ฒญ๊ณผ ์๋ต ์์๋ฅผ ๋ณด์ฅํ์ง ์๋๋ค.
๋ฐ๋ผ์ ์๋ต์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ์ ์์กดํ๋ ๊ฒฝ์ฐ์๋ ์ฝ๋ฐฑํจ์๋ฅผ ์ด์ฉํ์ฌ ์์
์์๋ฅผ ๊ฐ์ ์ ์ผ๋ก ๋ผ์์ค์ ์๋ค.
function getDB(callback){
// ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ถํฐ 3์ด ํ์ ๋ฐ์ดํฐ ๊ฐ์ ๋ฐ์์จ ํ, ์ฝ๋ฐฑ ํจ์ ํธ์ถ
setTimeout(()=>{
const value = 100
callback(value)
},3000)
}
function main(){
// ํธ์ถํ ์์
์ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋๊ธด๋ค
getDB(function(value){
let data = value * 2
console.log('data :', 'data' )
})
}
main()
ํ์ง๋ง ๊ณผ๋ํ ์ฝ๋ฐฑํจ์๋ฅผ ํ ๊ฒฝ์ฐ ์ฝ๋ฐฑ์ง์ฅ์ ๋น ์ง์ ์๋ค.
ํ๋ก๋ฏธ์ค ๊ฐ์ฒด
์ฝ๋ฐฑํจ์๋ ๋น๋๊ธฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ์ํ 'ํธ๋ฒ' ๊ฐ์ ๊ฒ์ด๋ฉฐ ๋น๋๊ธฐ ์ ์ฉ ํจ์๊ฐ ์๋๋ค.
ํ๋ก๋ฏธ์ค์ ๊ฐ์ฒด๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ ์ฉ๊ฐ์ฒด์ด๋ค.
๋น๋๊ธฐ ์์
์ ์ฑ๊ณต ๋๋ ์คํจ์ ๊ฒฐ๊ณผ๊ฐ์ ๋ํ๋ด๋ ๊ฐ์ฒด์ด๋ค.
function getDB(){
return new Promise((resolve)=>{
setTimeout(()=>{
const value = 100;
resolve(value)
},3000)
})
}
function main(){
getDB().then((valve)=>{ //์ฑ๊ณต์ ์๋ก ์ํํ์ ๋ ์คํ์ฝ๋
let data =value * 2
console.log('data',data)
})
.catch((error)=>{ // ์คํจ ํ์ ๋ ์คํ๋ ์ฝ๋
console.error(error)
})
.finally(()=>{ //์ฑ๊ณตํ๋ ์คํจํ๋ ๋ฌด์กฐ๊ฑด ์คํ
})
}
ํ๋ก๋ฏธ์ค 3๊ฐ์ง ์ํ
- Pending : ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋์ง ์์ ์ํ
- Fulfilled :์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋ ์ํ (then)
- Rejected: ์ฒ๋ฆฌ๊ฐ ์คํจ๋ก ๋๋์ํ (catch)
ํ๋ก๋ฏธ์ค ํธ๋ค๋ฌ
ํ๋ก๋ฏธ์ค์ ์ํ์ ๋ฐ๋ผ ์คํ๋๋ ์ฝ๋ฐฑ ํจ์
- then() : ์ดํ๋์์ ๋
- catch(): ๊ฑฐ๋ถ๋์์ ๋
- finally(): ์ดํ ๊ฑฐ๋ถ ์๊ด์์ด ์คํ
ํ๋ก๋ฏธ์ค ์ฒด์ด๋
ํ๋ก๋ฏธ์ค ํธ๋ค๋ฌ๋ฅผ ์ฐ๋ฌ์ ์ฐ๊ฒฐํ๋๊ฒ, ์ฌ๋ฌ๊ฐ์ ๋น๋๊ธฐ ์์
์ ์์ฐจ์ ์ผ๋ก ์ํ ํ ์ ์๋ค.
ํ๋ก๋ฏธ์ค ์ ์ ๋ฉ์๋
- Promise.resolve()
// Promise.resolve() ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๋ฏธ์ค ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ํจ์
function getPromiseNumber() {
const num = getRandomNumber(); // ์ผ๋ฐ ๊ฐ
return Promise.resolve(num); // ํ๋ก๋ฏธ์ค ๊ฐ์ฒด
}
// ํธ๋ค๋ฌ๋ฅผ ์ด์ฉํ์ฌ ํ๋ก๋ฏธ์ค ๊ฐ์ฒด์ ๊ฐ์ ์ฒ๋ฆฌํ๋ ํจ์
getPromiseNumber()
.then((value) => {
console.log(`๋๋ค ์ซ์: ${value}`);
})
.catch((error) => {
console.error(error);
});
- Promise.reject()
// ์ฃผ์ด์ง ์ฌ์ ๋ก ๊ฑฐ๋ถ๋๋ ํ๋ก๋ฏธ์ค ์์ฑ
const p = Promise.reject(new Error('error'));
// ๊ฑฐ๋ถ ์ฌ์ ๋ฅผ ์ถ๋ ฅ
p.catch(error => console.error(error)); // Error: error
- Promise.all()
๋ชจ๋ ํ๋ก๋ฏธ์ค ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์ดํ ๋ ๋ ๊น์ง ๊ธฐ๋ค๋ ค์, ๋ชจ๋ ํ๋ก๋ฏธ์ค๊ฐ ์๋ฃ๋๋ฉด ๊ทธ๋ thenํธ๋ค๋ฌ๊ฐ ์คํ๋๋ค.
// 1. ์๋ฒ ์์ฒญ API ํ๋ก๋ฏธ์ค ๊ฐ์ฒด ์์ฑ (fetch)
const api_1 = fetch("https://jsonplaceholder.typicode.com/users");
const api_2 = fetch("https://jsonplaceholder.typicode.com/users");
const api_3 = fetch("https://jsonplaceholder.typicode.com/users");
// 2. ํ๋ก๋ฏธ์ค ๊ฐ์ฒด๋ค์ ๋ฌถ์ด ๋ฐฐ์ด๋ก ๊ตฌ์ฑ
const promises = [api_1, api_2, api_3];
// 3. Promise.all() ๋ฉ์๋ ์ธ์๋ก ํ๋ก๋ฏธ์ค ๋ฐฐ์ด์ ๋ฃ์ด, ๋ชจ๋ ํ๋ก๋ฏธ์ค๊ฐ ์ดํ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ณ , ๊ฒฐ๊ณผ๊ฐ์ ์ถ๋ ฅ
Promise.all(promises)
.then((results) => {
// results๋ ์ดํ๋ ํ๋ก๋ฏธ์ค๋ค์ ๊ฐ๋ค์ ๋ด์ ๋ฐฐ์ด.
// results์ ์์๋ promises์ ์์์ ์ผ์น.
console.log(results); // [users1, users2, users3]
})
.catch((error) => {
// ์ด๋ ํ๋๋ผ๋ ํ๋ก๋ฏธ์ค๊ฐ ๊ฑฐ๋ถ๋๋ฉด ์ค๋ฅ๋ฅผ ์ถ๋ ฅ
console.error(error);
});
- Promise.allSettled()
์ฃผ์ด์ง ๋ชจ๋ ํ๋ก๋ฏธ์ค๊ฐ ์ฒ๋ฆฌ๋๋ฉด ๋ชจ๋ ํ๋ก๋ฏธ์ค ๊ฐ๊ฐ์ ์ํ์ ๊ฐ(๊ฑฐ๋ถ์ฌ์ )๋ฅผ ๋ชจ์ ๋ฐฐ์ด์ ๋ฐํ
- Promise.any()
์ฃผ์ด์ง ๋ชจ๋ ํ๋ก๋ฏธ์ค ์ค ํ๋๋ผ๋ ์๋ฃ๋๋ฉด ๋ฐ๋ก ๋ฐํ
- Promise.race()
์ดํ, ์คํจ ์ฌ๋ถ ์๊ด์์ด ๋ฌด์กฐ๊ฑด ์ฒ๋ฆฌ๊ฐ ๋๋ ํ๋ก๋ฏธ์ค ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํ
ํ๋ก๋ฏธ์ค ๋ํ ์ฝ๋๊ฐ ๋ณต์กํด ์ง๋ฉด ์ฝ์์ ์๋ ์ฝ๋๊ฐ ๋๋ฉฐ ์ด๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ๋์จ async/await ๊ฐ ์๋ค.
async/await
๋ง์น ๋๊ธฐ ์ฝ๋์ฒ๋ผ ์์ฑํ ์ ์๊ฒ ํด์ค๋ค.
- async : ํจ์์์ async ๋ฅผ ์์ฑํ๋ฉด ๋๋ฉฐ, ์ด๋ค ๊ฐ์ ๋ฆฌํดํ๋ ๋ฌด์กฐ๊ฑด ํ๋ก๋ฏธ์ค ๊ฐ์ฒด๋ก ๊ฐ์ธ์ ธ ๋ฐํ๋๋ค.
ํ๋ก๋ฏธ์ค ์ํ๋ฅผ ๋ค๋ฅด๊ฒ ์ง์ ํ์ฌ ๋ฐํ์ด ๊ฐ๋ฅํ๋ค.
then์ ๋ถ์ด๋๊ฒ๋ ๊ฐ๋ฅ
- await : then ๋ณต์กํ๊ฒ ์ฌ์ฉํ ํ์์์ด ๋น๋๊ธฐ ํจ์์ await๋ง ๋ช
์ํด์ฃผ๊ณ ๊ฒฐ๊ณผ๊ฐ์ ๋ณ์์ ๋ฐ๋๋ก ํ๋ฉด๋๋ค. promise๊ฐ ์ฒ๋ฆฌ๋ ๋๊ฐ์ง ์ฝ๋ ์คํ์ ์ผ์ ์ค์งํ๊ณ promise๊ฐ ์ฒ๋ฆฌ๋๋ฉด ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํ์ฌ ๋ณ์์ ํ ๋น
์๋ฌ ์ฒ๋ฆฌ
try cath๋ก ์ฒ๋ฆฌํ๋ฉด ๋๋ค.
// async/await ๋ฐฉ์
async function func() {
try {
const res = await fetch(url); // ์์ฒญ์ ๊ธฐ๋ค๋ฆผ
const data = await res.json(); // ์๋ต์ JSON์ผ๋ก ํ์ฑ
// data ์ฒ๋ฆฌ
console.log(data);
} catch (err) {
// ์๋ฌ ์ฒ๋ฆฌ
console.error(err);
}
}
func();