매개변수로 넘겨받은 함수는 일단 넘겨받고, 때가 되면 나중에 호출(called back)한다는 것이 콜백함수의 개념이다.
필요성?
$.get('url 주소/products/1', function(response) {
// ...
});
위 API가 실행되면 서버에다가 ‘데이터 하나 보내주세요’ 라는 요청을 보내죠. 그런데 여기서 데이터를 받아오기도 전에 마치 데이터를 다 받아온 것 마냥 화면에 데이터를 표시하려고 하면 오류가 발생하거나 빈 화면이 뜹니다. 이와 같은 문제점을 해결하기 위한 방법 중 하나가 프로미스입니다.
프로미스의 3가지 상태
Pending(대기) : 비동기 처리 로직이 아직 완료되지 않은 상태
Fulfilled(이행) : 비동기 처리가 완료되어 프로미스가 결과 값을 반환해준 상태
Rejected(실패) : 비동기 처리가 실패하거나 오류가 발생한 상태
async function f() {
return Promise.resolve(1);
}
f().then(alert); // 1
async가 붙은 함수는 반드시 프라미스를 반환하고, 프라미스가 아닌 것은 프라미스로 감싸 반환합니다. 또 다른 키워드 await는 async 함수 안에서만 동작합니다.
async function f() {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("완료!"), 1000)
});
let result = await promise; // 프라미스가 이행될 때까지 기다림 (*)
alert(result); // "완료!"
}
f();
await는 말 그대로 프라미스가 처리될 때까지 함수 실행을 기다리게 만듭니다. 프라미스가 처리되면 그 결과와 함께 실행이 재개되죠. 프라미스가 처리되길 기다리는 동안엔 엔진이 다른 일(다른 스크립트를 실행, 이벤트 처리 등)을 할 수 있기 때문에, CPU 리소스가 낭비되지 않습니다.
setTimeout(function(){console.log("hello")},0);
console.log("nice meet you, too")
위의 코드를 실행시킨다면 어떤 코드가 먼저 실행될까?function fn() {
setTimeout(() => {
console.log('하나');
setTimeout(() => {
console.log('둘');
setTimeout(() => {
console.log('셋');
}, 0);
}, 0);
}, 0);
}
fn(); // 결과 순서 => '하나', '둘', '셋'
동기적
으로 통신의 단점XML 대신 JSON을 데이터 통신에서 많이 쓰는 이유에 대해 토의해보기
JSON은 종료 태그를 사용하지 않습니다.
JSON의 구문이 XML의 구문보다 더 짧습니다.
JSON 데이터가 XML 데이터보다 더 빨리 읽고 쓸 수 있습니다.
XML은 배열을 사용할 수 없지만, JSON은 배열을 사용할 수 있습니다.
api를 JavaScript로 호출하는 방식에 대해서 서로 공유하고 각각 스타일별로 장단점을 분석해보기
api를 호출하는 다른 라이브러리에 대해서도 조사해보기