React
react 동기와 비동기
개갑순이돌이짱
2021. 10. 20. 11:26
import React,{Component} from 'react';
import './App.css';
class App extends Component {
f1(callback){
console.log('callback');
callback()
}
render() {
this.f1(function(){
console.log('todo 1');
console.log('todo 2');
console.log('todo 3');
})
return (
<div>
<h1>호랑이</h1>
</div>
);
}
}
export default App;
-콜백 지옥
// 동기 방식
class App extends Component {
render() {
//callback 지옥
setTimeout(() => {
console.log('1');
setTimeout(() => {
console.log('2');
setTimeout(() => {
console.log('3');
}, 1000); //보안 설정
}, 2000);//계정확인
}, 3000);//서버 접속 시간
return (
<div>
<h1>호랑이</h1>
</div>
);
}
}
//promise resolve,reject는 함수
//new promise(()=>{})
class App extends Component {
render() {
new Promise( (resolve, reject)=>{
setTimeout(() => {
console.log('1');
resolve();
}, 3000);
//인수를 전달하게 되면 then의
//람다에서 받는다
} )
.then(()=>{
new Promise( (resolve, reject)=>{
setTimeout(() => {
console.log('2');
resolve();
}, 2000);
} )
.then(()=>{
new Promise( (resolve, reject)=>{
setTimeout(() => {
console.log('3');
resolve();
}, 1000);
} )
})
})
return (
<div>
</div>
);
}
}
class App extends Component {
render() {
new Promise( (resolve, reject)=>{
setTimeout(() => {
console.log('1');
resolve();
}, 3000);
//인수를 전달하게 되면 then의
//람다에서 받는다
} )
.then(()=>{
new Promise( (resolve, reject)=>{
setTimeout(() => {
console.log('2');
resolve();
}, 2000);
} )
.then(()=>{
new Promise( (resolve, reject)=>{
setTimeout(() => {
console.log('3');
resolve();
}, 1000);
} )
})
})
return (
<div>
</div>
);
}
}
class App extends Component {
render() {
new Promise((resolve,reject) =>{
if(3>2){
resolve('독수리');
}else{
reject('앵무새');
}
})
.then((result) =>{
console.log(result);
})
.catch((result) =>{
console.log(result);
})
return (
<div>
</div>
);
//1번 함수는 이것은 죽은 코드이다.
class App extends Component {
f1 =() =>{
//fetch가 비동기 함수이다.
const response =fetch('http://date.jsontest.com/');
console.log(response);
//json 도 비동기이다.
const body = response.json();
console.log(body.date);
}
f2 =() =>{
//fetch가 비동기 함수이다.
fetch('http://date.jsontest.com/') //promise
.then(response =>{
console.log(response.type);
response.json() //promise
.then(body =>{
console.log(body.date);
})
})
}
render() {
return (
<div>
<button onClick={this.f1}>버튼1</button>
<button onClick={this.f2}>버튼2</button>
</div>
);
}
}
//1번 함수는 이것은 죽은 코드이다.
class App extends Component {
// f1 =() =>{
// //fetch가 비동기 함수이다.
// const response =fetch('http://date.jsontest.com/');
// console.log(response);
// //json 도 비동기이다.
// const body = response.json();
// console.log(body.date);
// }
f2 =() =>{
//fetch가 비동기 함수이다.
fetch('http://date.jsontest.com/') //promise
.then(response =>{
console.log(response.type);
response.json() //promise
.then(body =>{
console.log(body.date);
})
})
}
render() {
return (
<div>
<button onClick={this.f1}>버튼1</button>
<button onClick={this.f2}>버튼2</button>
</div>
);
}
}
f3 = async() =>{
//fetch가 비동기 함수이다.
const response = await fetch('http://date.jsontest.com/') //promise
const body = await response.json() //promise
console.log(body.date);
}
render() {
return (
<div>
<button onClick={this.f1}>버튼1</button>
<button onClick={this.f2}>버튼2</button>
<button onClick={this.f3}>버튼3</button>
</div>
);
}
}
f4 = () =>{
new Promise( (resolve, reject)=>{
setTimeout(() => {
console.log('1');
resolve();
}, 3000);
//인수를 전달하게 되면 then의
//람다에서 받는다
} )
.then(()=>{
new Promise( (resolve, reject)=>{
setTimeout(() => {
console.log('2');
resolve();
}, 2000);
} )
.then(()=>{
new Promise( (resolve, reject)=>{
setTimeout(() => {
console.log('3');
resolve();
}, 1000);
} )
})
})
}
f5 = async() =>{
await new Promise( (resolve, reject)=>{
setTimeout(() => {
console.log('1');
resolve();
}, 3000);
//인수를 전달하게 되면 then의
//람다에서 받는다
} )
await new Promise( (resolve, reject)=>{
setTimeout(() => {
console.log('2');
resolve();
}, 2000);
})
await new Promise( (resolve, reject)=>{
setTimeout(() => {
console.log('3');
resolve();
}, 1000);
})
}
fetchfect = (num,ms) => {
return new Promise( (resolve, reject)=>{
setTimeout(() => {
console.log(num);
resolve();
}, 3000);
//인수를 전달하게 되면 then의
//람다에서 받는다
} )
}
f6 = async() =>{
await this.fetchfect(1, 3000)
await this.fetchfect(2, 2000)
await this.fetchfect(3, 1000)
}