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() => {};