어떤 작업을 다른 객체에게 맡겨놓고, 그 일이 끝나기를 기다리고 있지 않고 내 할 일을 하다가 다른 객체가 작업을 마치면 call back!
non-block(IO작업이 진행되는 동안 작업이 멈추지 않고 다음 작업 수행)이며,
비동기 방식(요청을 하고 바로 제어권을 돌려받는 방식)의 함수인 것이다.
sum = function(a, b, callback){
let result = a + b;
callback(result);
}
sum(1, 2, funtion(res){
console.log(res);
}
sum 함수는 1, 2를 전달받고 result에 1 + 2 값을 넣는다.
그러고 callback 으로 받음 함수에 첫번째 변수로 result를 넣어 실행한다.
비동기로 처리하기 위해 callback 안에 callback 다시 callback….
이 문제를 해결하기 위해 Promise 또는 async/await를 사용할 수 있다!
ES6부터 등장한 흐름제어 패턴으로 내부적인 예외 처리 구조 기능을 가진다.
new Promise((resolve, reject) => {
//
});
const plus = new Promise((resolve, reject) => {
const a = 1;
const b = 2;
if(a + b > 2){
resolve (a + b); // 성공
}else{
reject(a + b);
}
});
plus
.then((sucess) => {
})
.catch((fail) => {
})
resolve(성공) 시에는 then, reject(실패) 시에는 catch가 실행된다.
const successPromise = Promise.resolve('success'); // 무조건 성공하는 Promise
const failurePromise = Promise.reject('failure'); // 무조건 실패하는 Promise
Promise.all로 여러개의 프로미스를 동시에 실행 가능하다.
하지만 이 중 하나라도 실패하면 catch.
callback에서는 불가능 하다.
Promise.all([Users.findOne(), Users.remove(), Users.update()])
.then((result) => {})
.catch((error) => {})
ES7부터 등장한 자바스크립트의 비동기 패턴으로 Promise 코드를 일자로 폈다고 생각하면 편하다! 비동기 코드의 겉모습과 동작을 좀 더 동기 코드와 유사하게 만들어 준다.
에러 처리를 위해 await를 try catch 문으로 감싼다.
await는 async함수 안에서만 사용 가능
promise를 일자로 폈다고 생각해라
async func() => {
let user = await Users.findOne('Shin');
}
🚚원글 (Jul 13 · 4 min) 글 이사🚚
origin : https://medium.com/developer-new-wisdom/node-js-2-callback%ED%95%A8%EC%88%98%EC%99%80-promise-%EA%B7%B8%EB%A6%AC%EA%B3%A0-async-await-5fa900e16c7b