setTimeout(code, delay);
- delay동안 기다리다가 code 함수를 실행
console.log(1);
setTimeout(function(){
console.log(2);
}, 2000);
console.log(3);
//결과
1
3
2
// 1-2-3이 아닌 1-3-2로 출력된다.
function goMart(){
console.log('마트에 가서 어떤 음료를 살지 고민한다.')
}
function pickDrink(){
setTimeout(function(){
console.log('고민 끝!!');
product = '제로 콜라';
price = 2000;
}, 3000);
}
function pay(product, price){
console.log(`상품명: ${product}, 가격 : ${price}`);
}
let product;
let price;
goMart();
pickDrink();
pay(product, price);
callback 함수를 준다.
function goMart(){
console.log('마트에 가서 어떤 음료를 살지 고민한다.')
}
function pickDrink(callback){
setTimeout(function(){
console.log('고민 끝!!');
product = '제로 콜라';
price = 2000;
callback(product, price);
}, 3000);
}
// function pay(product, price){
// console.log(`상품명: ${product}, 가격 : ${price}`);
// }
let product;
let price;
goMart();
pickDrink(function(product,price){
console.log(`상품명: ${product}, 가격 : ${price}`);
});
// pay(product, price);
pending
(대기) : Promise를 수행중인 상태Fulfilled
(이행) : Promise가 Resolve된 상태(성공)Rejected
(거부) : Promise가 지켜지지 못한 상태. Reject 된 상태(실패)Settled
: fulfilled 혹은 rejected로 결론이 난 상태function promise1(flag){
return new Promise(function (resolve, reject){
if(flag){
resolve('promise 상태는 fulfilled!! then으로 연결됩니다. \n 이때의 flag가 true입니다.');
}else{
reject('promis 상태는 rejected!! catch로 연결됩니다. \n 이때의 flag는 false입니다.');
});
resolve
(value) : 작업이 성공(fulfilled)
한 경우, 그 결과를 value와 함께 호출reject
(error) : 에러(rejected)
발생 시 에러 객체를 나타내는 error와 함께 호출[콜백함수]를 이용해 동기처리 한 것을 "promise"를 이용해 동기처리 하기
콜백함수
function goMart(){
console.log('마트에 가서 어떤 음료를 살지 고민한다.')
}
function pickDrink(callback){
setTimeout(function(){
console.log('고민 끝!!');
product = '제로 콜라';
price = 2000;
callback(product, price);
}, 3000);
}
let product;
let price;
goMart();
pickDrink(function(product,price){
console.log(`상품명: ${product}, 가격 : ${price}`);
});
Promise 사용
function goMart(){
console.log('마트에 가서 어떤 음료를 살지 고민한다.')
}
function pickDrink(){
return new Promise(function(resolve, reject){
setTimeout(function(){
console.log('고민 끝!!');
product = '제로 콜라';
price = 2000;
resolve();
}, 3000);
});
}
function pay(){
console.log(`상품명 : ${product}, 가격: ${price}`);
}
let product;
let price
goMart();
pickDrink().then(pay);
문제
1. 함수를 이용해 (4+3)*2-1 = 13 연산을 해보자
2. 연산순서 : 덧셈 -> 곱셈 -> 뺄셈
function add(n1, n2, cb){
setTimeout(function(){
let result = n1 + n2;
cb(result);
}, 1000);
}
function mul(n, cb){
setTimeout(function(){
let reulst = n*2;
cb(result);
}, 700);
}
function sub(n, cb){
setTimeout(function(){
let result = n - 1;
cb(result);
}, 500);
add(4,3, function(x){
console.log('1: ',x);
mul(x, function(y){
console.log('2: ',y);
sub(y, function(z){
console.log('3: ',z);
});
});
});
실행결과
1 : 7
2 : 14
3 : 13
결과 |
---|
catch
구문에서 한번에 에러 처리 가능async
Promise
를 반환한다.await
Promise
앞에 붙여 Promise
가 다 처리될 때까지 기다리는 역할을 하며 결과는 그 후에 반환한다. setTimeout(function(){
document.body.style.backgroundColor = 'red';
setTimeout(function(){
document.body.style.backgroundColor = 'orange';
setTimeout(function(){
document.body.style.backgroundColor = 'yellow';
setTimeout(function(){
document.body.style.backgroundColor = 'green';
setTimeout(function(){
document.body.style.backgroundColor = 'blue';
}, 1000)
},1000)
}, 1000)
}, 1000)
}, 1000)
1. colors배열에 색을 담아준다.
2. async와 for문을 이용해서 출력
function call(name, cb){
setTimeout(function(){
console.log(name);
cb(name);
}, 1000);
}
function back(cb){
setTimeout(function(){
console.log('back');
cb('back');
}, 1000);
}
function hell(cb){
setTimeout(function(){
cb('callback hell');
}, 1000);
}
call('kim', function(name){
console.log(name + '반가워');
back(function(txt){
console.log(txt + '을 실행했구나');
hell(function(message){
console.log('여기는' + message);
});
});
});
결과
function call(name){
return new Promise(function(resolve, reject){
setTimeout(function(){
console.log(name);
resolve(name);
}, 1000);
});
}
function back(txt){
return new Promise(function(resolve, reject){
setTimeout(function(){
console.log('back');
resolve('back');
}, 1000);
});
}
function hell(message){
return new Promise(function(resolve, reject){
setTimeout(function(){
// console.log("callback hell");
resolve("callback hell");
}, 1000);
});
}
call('kim')
.then(function(name){
console.log(name, "반가워");
return back();
})
.then(function(txt){
console.log(txt+ '을 실행했구나');
return hell();
})
.then(function(message){
console.log("여기는 " + message);
})
async function exec(){
let name = await call('kim');
console.log(name + '반가워');
let txt = await back();
console.log(txt + '을 실행했구나');
let message = await hell();
console.log('여기는' + message);
}
exec();
const[변수] = 배열;
undefined
일 때 기본 값 할당가능const lists = ['apple', 'grape'];
//기존 방식
console.log(lists[0], lists[1]);
//[변수] = 배열
[item1, item2, item3 = 'peach'] = lists;
console.log("item1 : ", item1); // apple
console.log("item2 : ", item2); // grape
console.log("item3 : ", item3); // peach
item1 = 'peach';
console.log('item1: ', item1);
console.log(item1); //item1 : peach
//교환
const x=1, y=3
[x,y] = [y,x];
console.log(x,y);
-> 이건 틀렸음
왜? const는 재선언, 재할당 불가이기 때문에 배열을 통째로 바꾸는건 안됨
1. const 대신에 let 이었으면 변경가능
2. x,y를 통째로 안 바꾸고 하나만 바꿔도 바뀜
const person={
//key :value
name : 'gildong',
age : '22',
gender : 'M',
friends ; ['chunhyang', 'chulsu'],
hello:function(){
console.log('hello');
},
'kdt-9' : 'codingon 9기'
};
//(객체.키)로 키값을 불러올 수 있음
console.log(person.name, person.age); //gildong, 22
//선언도 가능
person.age = 29;
console.log(person.age); //29
console.log(person.friends[0]); //chunhyang
//
console.log(person['name']); //gildong
console.log(person['kdt-9']); //codingon 9기
객체[키] -> 얘는 언제쓰냐?
키에 특수문자가 들어갈 때 위에 방식처럼 불러와야됨
ex)
person.kdt-9 -> 이거 - 때문에 안됨.
person['kdt-9'] -> 이런식으로 작성해야 정상적으로 불러올 수 있음
// 이런식으로 추가도 가능함
person['city'] = 'Seoul'
person.city = 'Incheon'; //변경도 가능
const{변수} = 객체;
console.log(name, city, gender); -> 이거 오류남
const{name, city, gender} = person 이렇게 불러와야댐
const{key = 'Hi', age: myAge} = person
-> 변수명 age를 myAge로 바꿔줫음
console.log(person.age); -> 변수명을 myAge로 바꿔줘서
age변수는 없어졌기 때문에 이걸로 못불러옴
const a = [1, 2, 3];
const n = [4, 5];
기존방식(concat
)
const concat = a.concat(b);
결과
새로운 방식(spread
)
const spread = [...b, ...a];
객체로 spread 연산자 사용 가능
const person={
name : 'gildong',
age : 25;
};
console.log({...person});
rest
는 파라미터 spread
랑 쓰이는 곳이 다르다.
function get(a, ...rest){
console.log(a, rest)
}
get(10, 20, 30, 40, 50, 60);
spread
파라미터는 호출하는 함수의 파라미터에 사용rest
파라미터는 호출받는 함수의 파라미터에 사용, 호출하는 함수의 파라미터 순서에 맞춰 값 설정 후 남는 파라미터 값을 배열로 설정
객체 : 고양이 그 자체
속성
class Cat{
constructor(name, age){
//속성
this.name = name;
this.age = age;
}
//메소드
mew(){
console.log("야옹");
}
eat(){
console.log("먹이를 먹습니다.");
}
}
let cat1 = new Cat('나비', 1);
let cat2 = new Cat('냥이', 2);
cat1.mew();
cat1.eat();
cat2.mew();
결과
- 야옹
- 먹이를 먹습니다.
- 야옹
많은 도움이 되었습니다, 감사합니다.