Promise new Promise 선언할 때 P 대문자로 적을 것 !
Async는 Promise를 간편하게? 쓰도록 해주는 애
에러 핸들링
try...catch 문법
try {
코드작성
}
catch(e) {
코드작성
}
복습/promise.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 프로미스 생성
const promise = new Promise((resolve, reject)=> {
console.log("수행중...");
setTimeout(()=> {
// resolve("안녕안녕안녕");
reject(new Error('not found'));
}, 2000)
})
// 프로미스 사용
promise.then(value=>console.log(value))
.catch(error=>console.log(error))
.finally(()=>{
console.log("끝났어요");
})
// function fetchUser() {
// return new Promise((resolve, reject)=>{
// // resolve("프로미스 성공"); // 프로미스는 fulfilld 상태가 됨
// reject(new Error('dddd'));
// // return "green";
// })
// }
// // resolve나 reject가 호출되어야 프로미스는 끝이 남
// const user = fetchUser();
// console.log(user);
const fetchNumber = new Promise((resolve, reject)=> {
setTimeout(()=>resolve(1),1000)
})
// then은 값을 전달할 수도 있고 또 다른 프로미스도 전달할 수 있음
fetchNumber.then(num => num *2)
.then(num => num *3)
.then(num => {
return new Promise((resolve, reject)=> {
setTimeout(()=>resolve(num-1), 1000)
})
}).then(num => console.log(num));
function getHen(){
return new Promise((resolve, reject)=> {
setTimeout(()=>resolve('암닭'), 1000)
})
}
function getEgg(){
return new Promise((resolve, reject)=>{
setTimeout(()=>reject(new Error('계란을 받아올 수 없어')),1000)
})
}
function cook(egg) {
return new Promise((resolve, reject)=> {
setTimeout(resolve(egg+'후라이'),1000)
})
}
getHen()
.then(getEgg)
.catch(error=> {
return '햄'
}).then(cook).then(console.log);
// Async를 함수 앞에 적으면 프로미스를 쓰지 않아도 함수 안에 블럭이 프로미스로 적용됨
// await
// async가 붙은 함수안에서만 사용할 수 있음
function delay(ms) {
return new Promise((resolve, reject)=> setTimeout(resolve,ms));
}
async function getApple() {
await delay(2000);
return '사과';
}
async function getBanana() {
await delay(2000);
return '바나나';
}
async function pickFruits() {
const apple = await getApple();
const banana = await getBanana();
return `${apple}+${banana}`;
}
pickFruits().then(console.log);
// 함수 앞에 async가 붙으면 해당 함수는 항상 프로미스를 반환
// 프로미스가 아닌 것을 프로미스로 감싸서 반환
async function asyfu() {
return 1;
}
asyfu().then(console.log);
async function asyfu2(){
return Promise.resolve(1);
}
asyfu2().then(console.log);
// await은 async가 붙어있는 함수 안에서만 사용 가능
// await 프로미스가 처리될 때까지 기다림
// await은 async 키워드가 있는 함수 안에서만 사용 가능 !!
async function promiseF() {
let promise = new Promise((resolve, reject)=> {
setTimeout(()=>resolve("완료!"), 1000)
});
let result = await promise;
// await promise 하면 promise가 하는 일 다 끝내고 result에 담아줌 (위의 예시에서는 1초 뒤)
}
// 에러 핸들링
// async function f(){
// await Promise.reject(new Error("에러발생!!!!"));
// }
// async function f(){
// throw new Error("에러발생!!!!");
// }
async function f() {
try{
let response = await fetch('유효하지않은 주소');
}
catch(e){
cosnole.log(e);
}
}
</script>
</body>
</html>
복습/error.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// try {
// alert('try 블럭 실행');
// green; // 선언되지도 않은 green 호출 해서 에러 만들기
// }
// catch(e) {
// alert('catch 블럭 실행');
// }
let json = '{"name""green", "age":30}';
try {
let user = JSON.parse(json);
console.log(user.name);
console.log(user.age);
}
catch(e) {
console.log("데이터에 에러가 있어 재요청을 합니다.");
}
let json2 = '{"age": 20}';
try {
let user2 = JSON.parse(json);
// console.log(user2.name);
// 이름이 없으므로 에러가 발생
if(!user2.name) {
throw new SyntaxError("불완전한데이터: 이름없음");
}
}
catch(e) {
console.log('catch 실행');
console.log(e.name);
console.log(e.message);
}
// throw 연산자 - 에러처리를 통보
// trhow <error object>
// 자바스크립트 에러 객체 생성자
// Error, SyntaxError, ReferenceError, TypeError
let error = new Error("에러가 생겼어요");
// new SyntaxError(message);
// new ReferenceError(message);
console.log(error);
console.log(error.name);
console.log(error.message)
</script>
</body>
</html>
'Stack > JavaScript' 카테고리의 다른 글
[JS] 2022 데브매칭 상반기 - 프로그래밍 언어 검색 (0) | 2022.08.22 |
---|---|
[JS] 생성자 함수 복습 (0) | 2022.08.22 |
[JS] Wave (0) | 2022.06.20 |
[JS] JumpGame (0) | 2022.06.17 |
[JS] Network (0) | 2022.06.17 |