동기
- 시작 시점과 완료 시점이 같은 것.
- blocking
비동기
- 시작 시점과 완료 시점이 같지 않은 것.
- 요청에 대한 결과가 동시에 일어나지 않는다.
- Java Script, Node.js(비동기적으로 작동하는 런타임)
- callback, promise, async/await 중 하나의 문법으로 구현 가능하다.
- non-blocking
커리함수
Callback
- 고차함수의 인자로 전달 받는 함수
- 순서를 제어할 수 있다.
let data = (path, callback) => {
fs.readFile(path, 'utf8', (err, data) => {
if(err) {
callback(err, null);
} else {
// 에러가 없으면 (null, data) -> **일반적으로 앞에 에러를 넣어주고 뒤에 데이터 넣어준다.**
callback(null, data);
}
})
}
data('a', (err, data) => console.log(data))
Promise
- new Promise(), resolve(), reject()
- .then(() ⇒ {return}) 으로 이어나갈 수 있다.
let data = path => {
return new Promise((resolve, reject) => {
fs.readFile(path, 'utf8', (err, data) => {
if(err) {
// 에러가 있으면 reject
reject(err);
} else {
// 에러가 없으면 resolve
resolve(data);
}
})
})
}
data('a').then((data) => console.log(data))
Promise.all