728x90
📍 18일 차 11.18. 목.(실시간 강의)
오늘은 실시간 강의로 Ajax
, promise
, async / await
, SPA
에 대해 배웠다.
❏ SPA 만들기
- SPA로 구현하려면 경로로 접속할 때 같은 파일을 내려줘야 한다.
html
파일은 웹 서버에서 보관하고html
해석은 웹 브라우저에서 한다.html
파일을 가공해서 고객들에게 보여주는 행위를client side tech, 혹은 front end
라고 한다.header
: 서버에서 클라이언트에게 전달하는 정보fetch
를 사용하면JSON
형태의 내용이 온다.- JS에서 객체를 표현하는 방법을 참고해서 만든 data spec
JSON.parse
: JSON으로 넘어온 데이터를 JS 객체 형태로 바꾼다.Ajax
:JS
를 사용하여 브라우저가 서버에게 비동기 방식으로 데이터를 요청하고, 서버가 응답한 데이터를 수신하여 웹페이지를 동적으로 갱신하는 프로그래밍 방식XMLHttpRequest
는 크로스브라우징을 고려해야한다. 지금보니까fetch
도 꽤나 안되는 브라우저들이 있었다.(Edge 12-13
,IE
,Opera Mini
)fetch
:fetch(url).then(type => type.json())
:promise
를json
타입으로 바꿔준다.XMLHttpRequest
을fetch
버전으로 바꿔보기
// XMLHttpRequest로 JSON 객체 가져오기
function name() {
var request = new XMLHttpRequest();
request.open("GET", "https://gorest.co.in/public/v1/users", false); // `false` makes the request synchronous
request.send(null);
if (request.status === 200) {
let text = request.responseText;
let obj = JSON.parse(text);
console.log("obj", obj.data[0].name);
document.querySelector("#name").value = obj.data[0].name;
} else if (request.status === 200) {
}
}
// 타입을 json으로 결정한다
1. let json = fetch("https://gorest.co.in/public/v1/users").then(type => type.json())
👉🏽 Promise {<fulfilled>: {…}}
[[Prototype]]: Promise
[[PromiseState]]: "fulfilled"
[[PromiseResult]]: Object
// 타입을 처리한다
json.then(res => console.log(res))
👉🏽 {meta: {…}, data: Array(20)}
728x90
❏ JSON
- 데이터를 주고받을 때 사용하기 위해 고안된 데이터 형태
get
방식은data
를 가져오기- 서버로 값을 보낼 때는
JSON
형태로 보내고, POST 할 때는headers
설정과JSONstringify
를 사용하기 - 짝 프로그래밍
fetch('/topics', {
method:'POST',
body:JSON.stringify({title:'js', body:'js is ..'}),
headers: {
'Content-Type': 'application/json'
}})
❏ async / await
promise
코드에async - await
문법을 사용하면 비동기적인 코드를 동기적으로 관리할 수 있다.- promise로 반환한 객체 앞에
await
를 붙이면 비동기적인 동작을 끝낼 때까지 기다린다. await
는 전역적으로 사용하는 것이 아니라async
함수 내에서만 사용할 수 있다.- 상황에 따라
promise
,async
를 맞춰서 사용하면 된다. async
문법은promise
를 리턴한다.async:
함수 내에서 비동기적으로 실행되면 비동기가 끝나면 다음 비동기가 실행된다
// async - await
async function asyncFunc() {
return "elice";
}
// promise
function promiseFunc() {
return new Promise((resolve) => resolve("elice"));
}
console.log(asyncFunc());
👉🏽 Promise { 'elice' }
// 인자와 return 값이 인자 한개면 생략할 수 있다.
console.log(asyncFunc().then(console.log));
console.log(promiseFunc());
👉🏽 Promise { 'elice' }
//async, await으로 변환하는 방법
// 1. Promise 대신 async로 비동기 처리해 'elice'를 반환하도록 fetchUser 함수를 수정하세요.
async function fetchUser() {
return 'elice';
}
const user = fetchUser();
user.then((res)=>console.log(res));
// 2. delay 함수를 이용해 getCoffee와 getTea 함수를 작성하세요.
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function getCoffee() {
await delay(1000);
return 'coffee';
}
async function getTea() {
await delay(1000);
return 'tea';
}
// 3. 위 두 개의 함수를 사용해서 coffee와 tea를 한번에 반환합니다.
async function getDrinks()
{
const coffee = await getCoffee();
const tea = await getTea();
return ${coffee} and ${tea};
}
getDrinks().then((res)=>{console.log(res)});
❏ REST API
- 이고잉님의
REST API
에 관한 짧은 영상 강의 보기 - REST: HTTP를 기반으로 클라이언트에서 서버로 연결할 때 정해진 아키텍처에 따라 접근하는 방식
- RESTAPI: REST를 기반으로 서비스 API를 구현한 것
반응형
'Frontend > 엘리스 SW 엔지니어 트랙' 카테고리의 다른 글
[ 엘리스 SW 엔지니어 트랙 ] 20일차 (0) | 2021.11.21 |
---|---|
[ 엘리스 SW 엔지니어 트랙 ] 19일차 (0) | 2021.11.19 |
[ 엘리스 SW 엔지니어 트랙 ] 17일차 (0) | 2021.11.17 |
[ 엘리스 SW 엔지니어 트랙 ] 16일차(4주차: 자바스크립트 III - Promise, async / await, API 통신) (0) | 2021.11.16 |
[ 엘리스 SW 엔지니어 트랙 ] 15일차 (0) | 2021.11.15 |
댓글