function printMe() {
console.log('Hello World!');
}
setTimeout(printMe, 3000);
console.log('대기 중...');
function increase(number, callback) {
setTimeout(() => {
const result = number + 10;
if (callback) {
callback(result);
}
}, 1000);
}
console.log('작업 시작');
increase(0, result => {
console.log(result);
increase(result, result => {
console.log(result);
increase(result, result => {
console.log(result);
increase(result, result => {
console.log(result);
console.log('작업 완료');
});
});
});
});
function increase(number) {
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
const result = number + 10;
if (result > 50) {
const e = new Error('NumberTooBig');
return reject(e);
}
resolve(result);
}, 1000);
});
return promise;
}
increase(0)
.then(number => {
console.log(number);
return increase(number);
})
.then(number => {
console.log(number);
return increase(number);
})
.then(number => {
console.log(number);
return increase(number);
})
.then(number => {
console.log(number);
return increase(number);
})
.then(number => {
console.log(number);
return increase(number);
})
.catch(e => {
console.log(e);
});
function increase(number) {
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
const result = number + 10;
if (result > 50) {
const e = new Error(‘NumberTooBig‘);
return reject(e);
}
resolve(result);
}, 1000)
});
return promise;
}
async function runTasks() {
try {
let result = await increase(0);
console.log(result);
result = await increase(result);
console.log(result);
result = await increase(result);
console.log(result);
result = await increase(result);
console.log(result);
result = await increase(result);
console.log(result);
result = await increase(result);
console.log(result);
} catch (e) {
console.log(e);
}
}
import axios from "axios";
import { useState } from "react";
import "./styles.css";
export default function App() {
const [data, setData] = useState(null);
const onClick = ()=>{
axios.get('https://jsonplaceholder.typicode.com/todos/1')
.then(res=>{setData(res.data)})
}
return (
<div>
<button onClick={onClick}>불러오기</button>
{data&&<textarea value={JSON.stringify(data, null, 2)}/>}
</div>
);
}
const [data, setData] = useState(null);
// const onClick = ()=>{
// axios.get('https://jsonplaceholder.typicode.com/todos/1')
// .then(res=>{setData(res.data)})
// }
const onClick = async()=>{
try{
const res = await axios.get("'https://jsonplaceholder.typicode.com/todos/1'");
setData(res.data);
}catch(e){
console.log(e);
}
async/await 이용 시 좀더 직관적으로 볼 수 있음
https://newsapi.org/s/south-korea-business-news-api
참조
import React from "react";
import styled from "styled-components";
const NewsItemBlock = styled.div`
display: flex;
.thumbnail {
margin-right: 1rem;
img {
display: block;
width: 160px;
height: 100px;
object-fit: cover;
}
}
.contents {
h2 {
margin: 0;
a {
color: black;
}
}
p {
margin: 0;
line-height: 1.5;
margin-top: 0.5rem;
white-space: normal;
}
}
& + & {
margin-top: 3rem;
}
`;
const NewsItems = ({ article }) => {
const { title, description, url, urlToImage } = article;
return (
<NewsItemBlock>
{urlToImage && (
<div className="thumbnail">
<a href={url} target="_blank" rel="noopener noreferrer">
<img src={urlToImage} alt="thumbnail" />
</a>
</div>
)}
<div className="content">
<h2>
<a href={url} target="_blank" rel="noopener noreferrer">
{title}
</a>
</h2>
<p>
{description}
</p>
</div>
</NewsItemBlock>
)
}
export default NewsItems;
import React from "react";
import styled from "styled-components";
import NewsItems from "./NewsItems";
const NewsListBlock = styled.div`
box-sizing: border-box;
padding-bottom: 3rem;
width: 768px;
margin: 0 auto;
margin-top: 2rem;
@media screen and (max-width: 768px) {
width: 100%;
padding-left: 1rem;
padding-right: 1rem;
}
`;
const sampleArticle = {
title: '제목',
description: '내용',
url: 'https://google.com',
urlToImage: 'https://via.placeholder.com/160',
};
const NewsList = () => {
return (
<NewsListBlock>
<NewsItems article={sampleArticle} />
<NewsItems article={sampleArticle} />
<NewsItems article={sampleArticle} />
<NewsItems article={sampleArticle} />
</NewsListBlock>
);
};
export default NewsList;