자바스크립트
[자바 스크립트 ] 동기 / 비동기 (Promise 객체)
리모찌
2024. 1. 31. 14:18
자바스크립트 : 동기 (비동기 작업도 가능 )
비동기 함수 : 다른코드의 실행을 기다리지않고 먼저 실행되는 코드 ( 콜백큐로 들어감 )
콜스택이 전부 비워지면 콜백큐에 있던 함수가 콜스택으로 들어가게되고 그때 다시 데이터를 출력 하게됨
콜스택의 함수-> 콜백큐
프로미스 객체
자바스크립트의 코드보다 서버는 느릴 수 밖에 없음
아직 응답받지 못한 데이터(돌려받을 데이터 ) 를 미래에 어떤 시점에 결과를 제공하겠다는 의미
promise 객체의 3가지 상태
- 대기(pending) : 이행하지도, 거부하지도 않은 초기 상태
- 이행(fulfilled) : 연산 성공
- 거부(rejected) : 연산 실패
사용방법 (.then, .catch, .finally)
- Promise를 만든후 , 사용할 때는 then, catch, finally 를 통해 사용이 가능
resolve- then을 통해 결과값을 얻고나서 처리
reject - catch를 통해 결과값을 얻고나서 처리
finally - resolve,reject 와 상관없이 무조건 처리
Promise Chaining
then을 나열해서 순차적으로 사용하는것
마지막에 return 후 다시 then 으로 다시 사용
예시
// Promise 생성
const myPromise = new Promise((resolve, reject) => {
// 비동기 작업 수행
const randomNumber = Math.random();
if (randomNumber > 0.5) {
// 성공 시
resolve(`Success! Random number is ${randomNumber}`);
} else {
// 실패 시
reject(`Failure! Random number is ${randomNumber}`);
}
});
// Promise 사용
myPromise
.then((result) => {
// 성공 시 실행되는 콜백 함수
console.log(result);
})
.catch((error) => {
// 실패 시 실행되는 콜백 함수
console.error(error);
});
const promiseTest = function() {
return new Promise ((resolver,reject)=>{
setTimeout(()=>{
resolver('success');
},2000);
});
};
promiseTest().then((res)=>{ //fulfiled(성공) 가 되고 (시간이 되면,) 으로 매개변수 받아와서 res 출력됨(100)
resolver의 데이터 (success) -> 출력 res-> success 문자열이 됨
console.log(res)
});
코드는 2초 뒤에 'success'를 출력하는 비동기 작업을 수행하는 Promise를 생성하고,
그 결과를 then 메서드를 통해 처리 하는 예시