본문 바로가기

블록체인 기반 핀테크 및 응용 SW개발자 양성과정 일기

[55일차]20210601 Fetch new Promise .then.catch 연습

반응형

DB port 건드려서 오류남.

같은 port3000번 이란 겹쳐서,,

DB 도 포트가잇군.. DB도 server 래 ! ㄷr른 ㅅ ㅓㅓ버 

mysql - 기본 port 3306 번 

 

 

오늘 배운거 저번주말 숙제에 합쳐봐ㅏ  =  숙 ㅈ ㅔ 

 

 

index.html 추가 

    <button id = "chatBtn">채팅</button>
    <div id="chatRoom">
       
    </div>
         .. . . . .

    </div>
    
         // 여기에 JS 파일 따로 추가 -> 코드 깔끔하게 
         
    <script type="text/javascript" src="/js/chat.js">
    </script>
</body>
</html>

 

 

server.js

app.get('/chat',(req,res)=>{
    res.send('hhh')
})

send : body 내용을 생성해서 줌 

 

public- js - chat.js 파일 만들기 

const chatBtn=document.querySelector('#chatBtn');
const chatRoom = document.querySelector('#chatRoom');

chatBtn.addEventListener('click',()=>{
    chatRoom.innerHTML='hello chat <br/>';
})

 

 

fetch 써서 가져올거

chat.js

const chatBtn=document.querySelector('#chatBtn');
const chatRoom = document.querySelector('#chatRoom');

chatBtn.addEventListener('click',async ()=>{
    let url = 'http://localhost:3000/chat'
    let options = {
        method:'GET'
    }
    let response = await fetch (url,options);
    let result = await response.text();

    chatRoom.innerHTML=result;
})

 

 

server.js - 이제 res.render로 하기 

app.get('/chat',(req,res)=>{
    res.render('chat.html')
})

views- chat.html파일 만들기 

<div id ="chat">
    <span class="me">안녕하세요</span> <!--내가 쓴글-->
    <span class="you"> 네 안녕 </span><!--남이 쓴글-->
</div>
<div id="chatInputArea">
    <input type="text" id="msg">
    <button id="chatSend">전송</button>
</div>

 

server on - check

chat.html 전체 render 한걸 fetch result로 가져와서 이렇게 chatRoom 의 innerHTML로 넣음. 

 

이런것도가능하구나 ,,,,,,,,, 

 

 

 

console.log(response)  -> 저 body: 값에 내용이 들어있음

console.log(result)   -> body값 안의 내용만 빼내옴 / 이번에 .json()이 아닌이유는 json 형태가 아니어서인듯

 

 

 

 


 

 

FETCH 복습 

fetch return Promise object 

 

test.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>
    <script type="text/javascript" src="./test.js"></script>
</head>
<body>
    
</body>
</html>

test.js

let myPromise = new Promise((resolve,reject)=>{
    setTimeout(function(){
        resolve("success!");
    },250);
});


function example(){
    this.name="ㅇㅇ";
}
//요 함수를 객체로 만들려면 
// {name:'ㅇㅇ'}

function User(){
    this.name='gg'
    this.age=20
    console.log(this) // this = 또 하나의 객체 
}

-> network 봐봐

 

Promise는 객체 

Promise쓸 떄는 항상 new를 쓴다 

new 는 함수를 객체로 변경해 주는 키워드

 

그럼 콜백은 또 무엇인고..

 

콜백 = 인자값에 함수명을 넣기 / 보통 익명함수

 

익명함수는 ()=>{} 함수명만 적었을 때와 똑같이 처리됨 = 소나타  (O)  / 소나타()  (X) 

장점 : 인자값도 받을 수 있는데 함수명만 적었을 때와 똑같이 처리됨 (그래서 자주씀) 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<- 요 코드와 아래 코드는 똑같이 실행

 

아반떼1(()=>{소나타1} ) 소나타1 인자값이 있는데 인자값도 받을 수 있고 함수 명만 적었을 때 실행할 수 있는 익명함수로 씀 

그랜저1은 인자값이 없어서 그대로 (그랜저1) 로 가능

 

 

 

 

 

 

 

콜백헬 해결위해 -> promise탄생 

 

const pr = new Promise((resolve,reject)=>{
    resolve('안녕하세요');
})

pr.then((data)=>{
    console.log(data)
}).catch((err)=>{
    console.log(err)
})

 

아래 두개는 같음

function aa(){
    const pr = new Promise((resolve,reject)=>{
        reject('실패햇삳');
    })
    return pr;
}
aa();

=

function aa(){
    return new Promise((resolve,reject)=>{
        reject('실패햇삳');
    })
}
aa();

function aa(){
    return new Promise((resolve,reject)=>{
        reject('실패햇삳');
    }).then((result)=>{
        console.log(result)
    }).catch((err)=>{
        console.log(err)
    })
}
aa()

function aa(){
    return new Promise((resolve,reject)=>{
        reject('실패햇삳');
    })
}

aa().then((result)=>{
    console.log(result)
}).catch((err)=>{
    console.log(err)
})

 

.then.catch 가 너무 귀찮다 -> async await 탄생 (성공의 내용만 처리하겠다. 실패도 가능하긴함) 

function aa(){
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            resolve('성공');
        },2000)
    })
}

function result(){
    let rst = aa();
    console.log(rst);
}

result();
function aa(){
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            resolve('성공');
        },2000)
    })
}

async function result(){
    let rst = await aa();
    console.log(rst);
}

result();

await 을 쓰면 resolve (status) 안의 값을 출력 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<- 두개는 똑같은 의미다 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Promise 객체 안에 Promise 있는 경우 

function aa(){
    return new Promise((resolve,reject)=>{
        resolve(new Promise((resolve,reject)=>{
            resolve('???')
        }))
    })
}

async function result(){
    let rst = await aa();
    console.log(rst);
}

result();

 

여기서 '꺼내쥬' console에 나오게 만들기

 

function 제발() {
    return new Promise((resolve, reject) => {
        resolve(꺼내줘())
    })
}

async function 꺼내줘() {  //return obj // pr
    let pr = await new Promise((resolve,reject)=>{
        resolve('꺼내쥬')
    })  
    
    const obj = {
        text:function(){
            return pr;
        }
    }
    return obj;
}

 

 

 

 

반응형