javascript promise

김_리트리버·2021년 2월 26일
0
post-custom-banner

promise ( = 약속하다, 가능성 )

A Promise is an object representing the eventual completion or failure of an asynchronous operation.

promise 는 비동기 작업의 최종 성공 또는 실패를 표현하는 객체이다.

cf> 비동기 작업

javascript 는 코드가 A->B->C 순으로 쓰여져 있을 때 차례대로 A->B->C 를 실행하기는 하지만
A 가 끝날때 까지 B가 실행되지 않지는 않는다.
즉 javascript 는 태스크가 종료되지 않은 상태라 하더라도 대기하지 않고 다음 태스크를 실행한다.

하지만 이렇게 되면 A 에서 연산한 결과를 B 에서 사용하는 로직일 때 큰 문제가 된다.

사용하는 이유

  • callback-hell 을 피하면서 비동기 로직을 동기로직으로 처리하기 위해
  • callback 함수는 호출시점을 지정할 수 없지만 promise 는 then 을 사용하여 호출시점을 지정할 수 있음

사용방법

function getData() {
  return new Promise(function(resolve, reject) {
    const data = 100;
    resolve(data);
  });
}

// resolve()의 결과 값 data를 resolvedData로 받음
getData().then(function(resolvedData) {
  console.log(resolvedData); // 100
});
function getData() {
  return new Promise(function(resolve, reject) {
    reject(new Error("Request is failed"));
  });
}

// reject()의 결과 값 Error를 err에 받음
getData().then().catch(function(err) {
  console.log(err); // Error: Request is failed
});

async await

function 앞에 async 를 붙이면 해당함수는 항상 promise 를 반환한다.

promise 가 아닌 값을 반환하더라고 resolved promise 를 반환한다.

await 키워드를 사용하는 대상이 promise 가 아닌 경우 자동으로 Promise.resolve()의 값을 반환
=> 즉 promise 가 아니더라도 await 을 사용해 동기로 작업을 할 수 있다.

async function foo() {
  return "foo"
}
foo().then((value)=>alert(value)); // foo
profile
web-developer
post-custom-banner

0개의 댓글