h e 1 1 o !
new promise 본문
promise의 가장 기본적인 형태
var job = new promise(function(resolve, reject { });
then 세팅
var job = new promise(function(resolve, reject) { }); //여기서 성공 / 실패 여부를 알려줘야 함.
job.then(function(data) { }) //then은 콜백 함수가 필요함. //그 콜백함수는 처리된 결과 데이터를 받는 파라미터가 필요함
//콜백함수의 'data' 파라미터를 어떻게 쓸지 정의해줘야함
var job = new promise(function(resolve, reject) {
resolve('resolved ok!'}); //성공 시 실행되는 resolve 함수(promise의 콜백함수의 인자로 들어온 함수)
job.then(function(data) { //성공 시 실행되는 then (성공 시 resolve의 결과가 들어옴. data
console.log('data', data) // data resolved ok! 찍힘
})
setTimeout의 콜백함수로 넣어주기
var job = new promise(function(resolve, reject) {
setTimeout(function(){resolve('resolved ok!')
}, 2000); //setTimeout에 resolve 함수를 콜백함수로 넣어줌
});
job.then(function(data) {
console.log('data', data)
})
이건 promise를 날 것 그대로 쓴 것. 보통은 어떤 함수 안에서 리턴으로 쓰임
function job1(){ //promise를 감싸는 함수 job1.
return new promise(function(resolve, reject) { //promise를 리턴한다
setTimeout(function(){resolve('resolved ok!')
}, 2000); //setTimeout에 resolve 함수를 콜백함수로 넣어줌
});
}
job1.then(function(data) {
console.log('data', data)
})
이 상태에서는 job1이 프로미스가 아니다. 함수로 호출해야 다시 프로미스가 됨 (then부분에서 호출)
function job1(){ //promise를 감싸는 함수 job1.
return new promise(function(resolve, reject) {
setTimeout(function(){resolve('resolved ok!')
}, 2000);
});
}
job1().then(function(data) { //요기
console.log('data', data);
})
여러개의 프로미스를 중첩해서 사용하기
function job1(){ //promise를 감싸는 함수 job1.
return new promise(function(resolve, reject) {
setTimeout(function(){resolve('resolved ok!')
}, 2000);
});
}
function job2(){ //새로운 프로미스
return new promise(function(resolve, reject) {
setTimeout(function(){resolve('resolved ok!')
}, 2000);
});
}
job1().then(function(data) {
console.log('data1', data);
job2().then(function(data){ //job1의 then에 jo2의 then이 들어옴
console.log('data2', data)
})
})
//(2초 후) data1 resolved ok!
//(2초 후) data1 resolved ok!
이 then 안에 then이 들어가는 걸 네이스틱 방식이라함. 체이닝 방식을 더 선호
체이닝 방식
function job1(){ //promise를 감싸는 함수 job1.
return new promise(function(resolve, reject) {
setTimeout(function(){resolve('resolved ok!')
}, 2000);
});
}
function job2(){ //새로운 프로미스
return new promise(function(resolve, reject) {
setTimeout(function(){resolve('resolved ok!')
}, 2000);
});
}
job1()
.then(function(data) {
console.log('data1', data);
return job2(); //then이 job2를 리턴함(프라미스를 리턴)
})
.then(function(data){ //리턴한 jo2의 결과값을 data로 받아 수행
console.log('data2', data)
})
})
//(2초 후) data1 resolved ok!
//(2초 후) data1 resolved ok!
reject로 바꿔보자
function job1(){ //promise를 감싸는 함수 job1.
return new promise(function(resolve, reject) {
setTimeout(function(){reject('jog1 fail!') //리젝트, 데이터 바뀜
}, 2000);
});
}
function job2(){ //새로운 프로미스
return new promise(function(resolve, reject) {
setTimeout(function(){resolve('resolved ok!')
}, 2000);
});
}
job1()
.then(function(data) {
console.log('data1', data);
return job2(); //then이 job2를 리턴함(프라미스를 리턴)
})
.catch(funciton(reason){ //catch는 reject 함수의 매개변수 'jog1 fail!'을 인수로 받을 것.
console.log('reason', reason);
})
.then(function(data){ //리턴한 jo2의 결과값을 data로 받아 수행
console.log('data2', data)
})
})
//(2초 후) reason job1 fail!
//dat2 UNDEFINED 출력
undafined 뜨는 이유는, 마지막 then에 있는 함수도 호출이 되어서 그렇다.
reference
https://www.youtube.com/watch?v=PasFh_t1mhY&t=1s
'p r o g r a m m i n g' 카테고리의 다른 글
React intro (0) | 2022.06.02 |
---|---|
fetch API (response object, json) (0) | 2022.06.01 |
비동기 (0) | 2022.05.29 |
underbar 과제 리뷰 (0) | 2022.05.28 |
OOP / prototype 이해를 위해 (0) | 2022.05.25 |