
function getData(cb){
...
cb(response) // cb 함수 호출
}
getData(function(tableData){
console.log(tableData);
});
실행은 바로 하되, 결괏값은 나중에 받는 객체.
실행이 완료된 후 then이나 catch 를 통해 결과값을 받게 된다.
new Promise((resolve,reject)=>{});
→ resolve, reject 를 매개변수로 갖는 콜백함수를 넣어준다
이렇게 만들어진 promise에는 then 과 catch 메서드를 붙일 수 있다.
getData = new Promise((resolve,reject) => {
...
});
getData
.then((message) => {})
.catch((error) => {})
.finally(() => {})
resolve() 가 호출되면 then 이 실행되고
reject() 가 호출되면 catch가 실행된다.
finally는 언제나 호출된다.
resolve(),reject()에 넣어준 인수는 각각 then(),catch()의 매개변수가 된다.
then 에서 Promise 를 return 하게 되면 이 Promise 를 다시 새로운 then 과 catch로 받게된다.
역시 이전 then 에서 resolve / reject 에 넣어준 인수가 새로운 then, catch 의 매개변수가 된다.
getData
.then((message) => {
return new Promise((resolve, reject)=>{
resolve(message);
})
})
.catch((error) => {})
.then((message2) => {
console.log(message2);
})
async : 함수 앞에
async를 붙이면 암묵적으로 Promise를 반환한다.
await : promise를 기다린다. async로 정의된 함수에서만 사용 가능하다
async function findUser(){
let user = await User.findOne({});
user = await user.save();
user = await user.findOne({gender: 'm'});
}
await 을 붙이면 해당 프로미스가 resolve 될 때까지 기다렸다가 로직을 진행한다. 예를 들어 let user = await User.findOne({}); 은 User.findOne({})이 resolve 된 후 user 변수를 초기화하게 되는 것.
error는 ?
async function findUser(){
try{
let user = await User.findOne({});
} catch( error ){
console.log(error)
} finally {
console.log('무조건 실행');
};
const findUser = async() => {};