8. 비동기(콜백함수, 프로미스, await/async, fetch)
알잘딱깔센 JavaScript 비동기 프로그래밍 - 비동기 너 내 동기가 돼라
// 동기 - 순차적
// 호준 : 로봇 청소기 돌리고(10시)
// 호준 : 빨래하고(11시)
// 호준 : 설거지하고(12시)
// 호준 : 요리한다(1시)
// 비동기 - 비순차적
// 호준 : 로봇 청소기 돌리면서(10시)
// 호준 : 빨래도 돌리고(10시)
// 호준 : 설거지하고(10시)
// 호준 : 요리할려고 물도 끓이고(10시)
const one = '1';
const two = '2';
const three = '3';
console.log(one);
setTimeout(() => {
console.log(two);
}, 1000);
console.log(three);
// 아래 코드는 왜 그럴까요?
const one = '1';
const two = '2';
const three = '3';
console.log(one);
setTimeout(() => {
console.log(two);
}, 0);
console.log(three);
// 싱글쓰레드
// 일할 수 있는 녀석이 1명 -> JS
// 멀티쓰레드
// 일할 수 있는 녀석이 여러명 -> 다른언어 대부분이 지원합니다.
// * JS는 싱글쓰레드이지만 웹 브라우저는 멀티쓰레드가 가능합니다. 이에 대해서는 이 챕터의 마지막 목차인 호출스택에서 자세하게 알아봅니다.
// 우리가 이런 비동기 프로그래밍을 왜 알아야 하고, JavaScript의 실행 구조는 왜 알아야 하는가?
one() // 페이지 로드하고
two() // 서버에서 이미지와 상세 데이터를 받아오고(예 - <http://test.api.weniv.co.kr/mall>) - 1분
three() // 읽어온 데이터를 뿌려준다
four() // 페이지에 정적 데이터 로드
const 버튼 = document.querySelector('.button');
버튼.addEventListener('click', function(){});
// 버튼.addEventListener('click', '다른 곳에서 짠 함수이름'); // ex('click', helloworld100)
// function helloworld100() {
// console.log('hello world');
// console.log('hello world');
// }
// 버튼.addEventListener('click', ()=>{});
function 함수하나(출력){
console.log('hello');
출력('world');
}
함수하나(console.log);
let hojun = console.log;
hojun('hello world');
user.login(
id,
pw,
로그인성공,
로그인실패,
이미지로드,
계좌연동...)
userData.login(
id,
pw,
(user) => {
userData.getData(
user,
(userData) => {
..콜백에 콜백..
},
(fail) => {
..콜백에 콜백..
}
);
},
(fail) => {
..콜백에 콜백..
},
(user) => { //이미지 로드
..콜백에 콜백..
},
(user) => { // 계좌 연동
..콜백에 콜백..
},
);