JavaScript : 콜백함수

김가영·2020년 10월 6일
0

JavaScript

목록 보기
2/9
post-thumbnail

콜백 함수

function getData(cb){
	...
	cb(response) // cb 함수 호출
}

getData(function(tableData){
	console.log(tableData);
});

콜백 지옥을 해결하는 법


Promise

실행은 바로 하되, 결괏값은 나중에 받는 객체.
실행이 완료된 후 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()의 매개변수가 된다.

promise 중복

then 에서 Promise 를 return 하게 되면 이 Promise 를 다시 새로운 thencatch로 받게된다.
역시 이전 then 에서 resolve / reject 에 넣어준 인수가 새로운 then, catch 의 매개변수가 된다.

getData
    .then((message) => {
    	return new Promise((resolve, reject)=>{
        	resolve(message);
        })
    })
    .catch((error) => {})
    .then((message2) => {
    	console.log(message2);
    })

async / await

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('무조건 실행');
};
  • finally{} 는 무조건 실행된다.
  • async 함수 정의하는 또다른 방법 : const findUser = async() => {};
profile
개발블로그

0개의 댓글