우아한 테크러닝 세 번째 시간🤓
개인적으로 구분이 안될때가 많으니 map함수로 돌리거나 할때는 컴포넌트로 구분해주어서 보기쉽게 만드는것도 좋다
비대해지기 전에 컴포넌트를 쪼개서 관리한다
통신과 정보를 주고받는것은 정보의 맥락이 일치되어야하는데 ,
실제로 그 수준을 레이어라고 생각하면,상대방이 이해할 수 있는 레이어를 파악하는것이 중요하다.
Promise();
//비 동기
const p = new Promise(function(resolve, reject) {
resolve("1");
});
//
p.then(function(r) {
consol.elog(r)
});
const x = 10;
const y = x* 10;
//순차적 실행
const x = () => 10;
const y = x() * 10;
// 순차적 실행 x
function* foo () {}
//함수 이름 뒤에 * 가 붙으면 제너레이터 함수라고 한다.
function* make() {
return 1;
}
const i = make();
//보통의 함수는 1이 들어오지만 이 제너레이터 함수의 경우 객체(iterator)가 들어온다
//코르틴 이라고 하는 함수의 구현체
//함수는 인자를 받고, 계산을 한 다음 리턴을 하고, 리턴이 없으면 undefined여서 리턴없는 함수는 없지만
//함수인데 리턴을 여러번 할 수 있게 끔 하는 것은 다시 함수가 호출 될때 처음부터 시작이 아니라, 마지막 리턴한 지점부터 다시시작, 또 호출되면 마지막 호출에서 다시시작 한다는 의미
//이걸 코르틴 이라고 하고 일부를 차용한 것이 제너레이터 이다 .
//계속 값을 생산해 낸다는 의미에서 제너레이터 라는 이름을 사용함 .
function* makeNumber () {
let num = 1;
while(true) {
yield num++; }
//제너레이터에서 리턴이 yield라고 볼 수 있다.
}
const i = makeNumber();
i.next();
//이렇게 호출했을때 yield나 return이 나올때까지 실행한다.콘솔에 찍으면 객체를 리턴하는데
console.log(i.next())
//object {value : 1 , done : false } 를 리턴한다
//yield는 함수를 끝내지 않는다
//내부의 상태를 함수가 알고있다는 뜻
const delay = ms -> new Promise((resolve) => setTImeout(resolve,ms));
function* main() {
console.log("시작")
yield delay(3000);
console.log("3chenl")
//비동기를 동기적으로 풀수 있게 끔 보이는 상황
}
const it= main();
console.log(it.next())
const {value} =it.next()
value.then(()=> {
it.next()
}
//동기적인 코드처럼 보일 수 있는 것이 redux-saga 이다
//응답오면 보내주고, 보내주고 하는데 실상은 비동기 적 인것
async function main2() {
console.log("시작")
await delay(3000)
console.log("end") ;
}
main2();
//하면 비동기를 동기 처럼 보이게끔 한다
둘은 비슷하지만 뭐가 다른것일까?
async await는 promise에 최적화 되어있는 함수인데
yield는 사용 범위가 넓다.
다양한 케이스에서 사용이 가능하다