일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 다른사람 프로젝트 수정전 가져야할 자세
- 스프링부트
- it
- 룸북
- 타임리프
- 시퀀스 조회
- Intellij
- 추천 프로그램
- Java
- 타임리프와 스프링
- linux
- cmd
- 개발시작전 자세
- 추천 사이트
- 비밀번호 변경 명령어
- 자바스크립트 인라인
- 명령어
- JSON
- 프로젝트 클린
- Test 룸북 사용하기
- BindingResult
- 함수 인자값 id
- 하모니카 OS 5
- 설정
- StringUtils.hasText
- #{..}
- 리눅스
- 순서 보장
- js
- select
Archives
- Today
- Total
웹개발 블로그
[JS] 비동기 작업 처리하기2 - Promise (JS 내장객체) 본문
◆React.js & Next.js & Node.js/JavaScript
[JS] 비동기 작업 처리하기2 - Promise (JS 내장객체)
쿠키린 2025. 1. 26. 18:16🔽콜백함수 사용법
https://hyeonddobbi.tistory.com/454
[JS] 비동기 작업 - 콜백함수 사용하여 처리
callback함수를 통해 바깥에서도 내부에 선언한 변수 사용가능하다.[예시1]3초뒤 sum 값 출력 add함수가 실행되면서, 내부에 있는 비동기함수가 실행된다.3초뒤 sum이 계산되고 인자값으로 sum을 주
hyeonddobbi.tistory.com
✅Promise
비동지 작업을 효율적으로 결과를 처리할 수 있도록 도와주는
자바스크립트의 내장 객체
Promise의 효능
- 비동기 작업 실행
- 비동기 작업 상태 관리
- 비동기 작업 결과 저장
- 비동기 작업 병력 실행
- 비동기 작업 다시 실행
- 기타 등등.....
형태
Promise 객체 안에서
ㄴ 비동기 작업(ex. setTimeout) 작성
3가지 상태
대기(Pending) | ||
🔽 | 🔽 | |
성공(Fulfilled) | 실패(Rejected) |
//상태 : 대기 , 성공, 실패
const promise = new Promise((resolve, reject) => {
//비동기 작업 작성
// 이 공간을 executor(익스큐터) 함수라고 부른다.
// (이 안에서도 콜백함수를 작성한다.)
// 두가지 파라미터가 있는데
// resolve, reject (둘다 콜백함수 매개변수)라고 한다.
setTimeout(() => {
console.log("안녕")
resolve("안녕");//성공을 나타냄, 인자값으로 결과를 넘겨준다.
}, 2000);
});
setTimeout(()=>{
console.log(promise);//프로미스 객체 실행
// (promisState가 fullfilled면 성공)
// promisResult는 결과이다.
}, 3000);
console.log(promise)
setTimeout(() => {
console.log("안녕")
//executor함수에서 reject를 호출하게 되면 promise에 비동기작업이 실패하는거다.
reject("실패")
}, 2000);
✅핵심
resolve와 reject 콜백함수를 통해 Promise에 결과값을 전달 할 수 있다.
예시1
//then 메소드
//뜻 : 그 후에
//대기 , 성공, 실패
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
const num = null;
if(typeof num === "number"){
resolve(num+3);
}else{
reject("num이 숫자가 아닙니다.");
}
}, 2000);
});
promise.then((value) => //resolve 콜백함수의 결과값
{
console.log(value);
}).catch((error) => { //reject 콜백함수의 결과값
console.log(error);
})
출력 : 13
👀예시2
function add10(num){
//새로운 promise 객체를 생성
const promise = new Promise((resolve, reject)=>{
setTimeout(() => {
if(typeof num === "number"){
resolve(num + 10);
}else{
reject("num이 숫자가 아닙니다.")
}
}, 2000);
})
return promise;
}
const p = add10(0);
p.then((value) => {
const newP = add10(value);//콜백함수 결과값 인자로 넣고 다시 add10()호출
newP.then((result) => {
console.log(result);//결과
});
}).catch((error)=> {
console.log(error);
})
출력 : 20
👀예시2가 계속 반복되면 콜백지옥이 생기게 되는데... 어떻게 처리하나?
function add10(num){
//새로운 promise 객체를 생성
const promise = new Promise((resolve, reject)=>{
setTimeout(() => {
if(typeof num === "number"){
resolve(num + 10);
}else{
reject("num이 숫자가 아닙니다.")
}
}, 2000);
})
return promise;
}
add10(0)
.then((value) => {
//콜백지옥을 벗어나기 위해 새로운 newP객체의 결과값을 then을 통해 처리 가능하다.
return add10(value);
}).then((result) => {
console.log(result);
return add10(undefined); //💥중간에서 발생한 오류더라도 아래 catch문에서 처리함.
}).then((result) => {
console.log(result);
}).catch((error) => {
console.log(error);
})
💥좀 더 가독성있게 사용할 수 없을까?
다음 시간에는 async/await 키워드에 대해서 알아보자
https://hyeonddobbi.tistory.com/457
[JS] 비동기 작업 처리하기 (async/await)
asysn / await 사용async함수 앞에 붙는 키워드어떤 함수를 비동기 함수로 만들어주는 키워드함수가 프로미스를 반환하도록 반환async function getData(){//async 키워드를 통해 비동기 함수로 변환 return{ nam
hyeonddobbi.tistory.com
'◆React.js & Next.js & Node.js > JavaScript' 카테고리의 다른 글
[JS] 비동기 작업 처리하기3 - async/await 키워드에 대해서 (0) | 2025.01.26 |
---|---|
[JS] 비동기 작업 처리하기1 - 콜백함수 사용하여 처리 (0) | 2025.01.21 |
[JS] 스프레드(Spread) 연산자? (1) | 2025.01.21 |
[JS] (배열/객체) 구조 분해 할당 (0) | 2025.01.21 |
[JS] 함수, 함수 표현식, 화살표 함수, 콜백함수 (1) | 2025.01.20 |