코드가 완료될 때까지 기다리는 방식이 동기 프로그래밍
코드가 실행되고, 완료될 때까지 기다리지 않고 다음 코드를 실행하는 방식이 비동기 프로그래밍
자바스크립트는 싱글 쓰레드로 동작하나 이벤트 루프를 통해 동기 프로그래밍의 단점을 해결
=> 실제로는 브라우저에서 멀티 쓰레드로 처리되기도 함.
프로세스: 우리가 기본적으로 사용하는 프로그램
쓰레드: 프로그램 내에서 동작하는 일꾼
web api로 빠질 수 있는 것
function sayHello(name){
console.log(`Hi, ${name}`)
}
function sayBye(name){
console.log(`Bye, ${name}`)
}
function intro(name, callback){
callback(name);
}
intro("John", sayHello);
함수 내에서 호출될 함수를 의미
함수를 파라미터로 넘기는 것이 특징
Arrow Function으로 많이 씀
어떤 처리 후 호출될 함수를 정의한다고 생각
JavaScript Object Notation
{
"name":{
"first":"sojeong",
"last" : "park"
}
"age":25,
"skills":[
"HTML",
"CSS",
"JavaScript"
]
}
Object와Array 두가지로 이루어짐
object는 key-value로 표현 ( 키 값은 "따옴표"로 묶어줘야함!
array는 배열로 표현
부모/자식으로 표현 가능
parse
:문자열을 객체로 변환
stringify
:객체를 문자열로 변환
비동기를 다루기 위한 객체
비동기 작업의 완료 혹은 실패를 다룰 수 있음
미래의 결과에 따라 어떻게 하겠다는 약속의 개념!!
const ex1 = new Promise(function (resolve, reject){
setTimeout(() => resolve("success"), 1000);
});
ex1.then(
result => alert(result),
error => alert(error)
);
ex1.then(result => alert(result))
.catch(error => alert(error))
.finally(()=> alert("just working"));
then에 인자가 하나라면, 성공했을때만 처리
catch는 에러가 났을 경우에만 처리
finally는 성공/실패 여부와 상관없이 처리할 수 있음(대신 성공/실패 여부를 알 수 없다.)
promise.then(()=>alert("first"))
.then(() => alert("second"))
.catch(() => alert("error"))
.then(() => alert("after error"));
then / catch / finally 모두 promise를 return하기 때문에 가능
then이 지속적으로 호출되는 도중 에러가 발생한다면, 바로 catch로 넘어감
catch가 호출된 뒤로도 이어 붙일 수 있음
Promise.all([
func1(),
func2(),
func3()
])
.then(()=> alert("all success"))
.catch(() => alert("error"));
함수들을 동시에 병렬로 실행할 수 있음
병렬로 작업을하고, 모두 완료될 때까지 기다림
HTTP요청을 간단하게 조작할 수 있는 인터페이스
fetch("https://blah")
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.log(err));
fetch함수는 Promise를 반환함
주소만 입력해줘도 주소의 정보를 읽어올 수 있음
주로 서버와 정보를 주고 받을 때 사용
오늘은 저번주보다는 왜인지 이해를 잘했다...!
실습도 복습하면서 깃헙에 업로드 완
ㅎㅎ
이제 마켓컬리 프로젝트 하러....(마켓컬리 프로젝트는 조만간 정리해서 올려야지,,꼭,,)