Node.js(Promise, async/await

이정규 (가지마)·2023년 6월 3일
0

프로미스

-콜백 헬이라고 불리는 지저분한 자바스크립트 코드의 해결책

프로미스 : 내용이 실행은 되었지만 결과를 아직 반환하지 않은 객체

ex)

const condition = true;
const promise = new Promise((resolve,reject) => {
  
  if(condition){
    resolve('성공'); // 값을 계속  들고있음. (비동기적)
    
  }else{
	reject('실패');  // 값을 계속 들고있음.   (비동기적) 
  }
});
//다른 코드가 들어갈 수 있음. 
promise
.then({message} =>{
  console.log(message);// 성공(resolve)한 경우 
})
.catch({error} =>{
  console.error(error); // 실패(reject)한 경우 
})

Promise.all(배열) : 여러 개의 프로미스를 동시에 실행
-하나라도 실패하면 catch로감
-allSettled로 실패한 것만 추려낼 수 있음.

프로미스는 어떠한 동작을 의미함.
성공하면 resolve를 호출
실패하면 reject를 호출함.

resolve를 호출하면 then
reject를 호출하면 catch로감.

async/await

Async/await으로 한번더 축약 가능.

async function findAndSaveUser(Users){
  let user = await.Users.findOne({}); //실행순서 오른쪾에서 왼쪽 Promise - > then -> 결과값.
  user.name = 'zero';
  user = await user.save();
  user = await Users.findOne({gender:'m'});
  //생략
}

async로 리턴한 갑승 .then으로 받아야함.

ex)

main().then((name)=>...)

async도 결국 promise이기 때문임.

for await
노드 10부터 지원

for await(변수 of 프로미스배열)

resolve된 프로미스가 변수에 담겨나옴
await을 사용하기 때문에 async함수 안에서 해야함

const promise1 = Promise.resolve('성공1');
const promise2 = Promise.resolve('성공2');

(async () =>{
  for await(promise of[promise1, promise2]){
    console.log(promise);
  }
})();
profile
"꾸준함이 답이다."

0개의 댓글