1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
'use strict';
//JavaScript is synchronous (자바스크립트는 동기적이다)
//hoisting이 된 이후부터 코드가 순서에 맞춰 동지거으로 실행된다
//hoisting: var, function declaration 이 제일 위로 올라가는 것이다
console.log('1');
setTimeout(() => console.log('2'),1000); //1초가 지나면 출력한다, callback 함수 = 원하는 기능 전달, 비동기(asynchronous)
console.log('3');
//Synchronous callback
function printImmediately(print){
print();
}
printImmediately(() => console.log('hello')); //콘솔에 1 | 3 | hello | 2 순서로 출력
//Asynchronous callback
function printWithDelay(print, timeout){
setTimeout(print, timeout);
}
printWithDelay(() => console.log('async callback'), 2000);
//Callback Hell example
class UserStorage {
loginUser(id, password, onSuccess, onError) {
setTimeout(() => {
if(
(id === 'sigcho' && password === 'dream') ||
(id === 'corder' && password === 'academy')
) {
onSuccess(id); //onSuccess 콜백 불러준다, id 전달
} else {
onError(new Error('not found')); //onError 콜백 불러준다, Error객체 만들어서 'not found'전달한다
}
}, 2000);
}
getRoles(user, onSuccess, onError){
setTimeout(() => {
if (user === 'sigcho') {
onSuccess({name: 'sigcho', role: 'admin'});
} else {
onError(new Error('no access'));
}
}, 1000);
}
}
//1. id와 password 사용자에게 받아오기
//2. 서버에 login
//3. id를 통해서 role 받아오기
//4. 사용자의 object 출력
const userStorage = new UserStorage(); //클레스 만들기, 클레스로 백엔드와 통신한다
const id = prompt('enter your id');
const password = prompt('enter your password');
userStorage.loginUser(
id,
password,
user => { //onSuccess일 때, 사용자의 데이터 받아옴
userStorage.getRoles( //사용자의 역할을 받아옴
user,
userWithRole => {
alert(`Hello ${userWithRole.name}, you have a ${userWithRole.role} role`); //사용자에게 역할을 알려준다
},
error => {
console.log(error);
}
);
},
error => {console.log(error)}, //onError일 때, 에러 전달
);
|
cs |
'JavaScript' 카테고리의 다른 글
드림코딩 : JS - 13. async, await, Promise APIs (비동기의 꽃) (0) | 2020.10.20 |
---|---|
드림코딩 : JS - 12. Promise, Callback 지옥을 Promise로 예쁘게! (0) | 2020.10.20 |
드림코딩 : JS - 10. JSON, this 오류 (0) | 2020.10.20 |
드림코딩 : JS -9. array API 총정리 (0) | 2020.10.19 |
드림코딩 : JS - 8. array (0) | 2020.10.19 |