세리프 따라잡기

JavaScript - promise에 대해 본문

JavaScript

JavaScript - promise에 대해

맑은 고딕 2022. 7. 13. 01:41

promise를 등록해두면, 이후 성공했을 때 반환됨

이미 promise가 성공했는데 등록하면, 바로 반환

 

javascript에 내장된 object

asynchronous operation === 비동기적인 것을 수행할 때 콜백 함수 대신에 유용하게 쓸 수 있는 object

 

두 가지를 잡고 가자😗 (생각하자!)

1. state = 프로세스가 무거운 수행을 하는지, 다 완료해서 성공/실패했는지의 상태를 이해

☞ state: pending → fulfilled or rejected

2. producer / consumer의 차이를 잘 이해하면 된다.

 

1. producer의 입장 code

const promise = new Promise((resolve, reject) => {
	console.log('doing something');
});

// executer 콜백 함수가 바로 실행! (때문에 바로 실행하지 않으려면 주의하면서 짜야함)
// ex. network 통신하는 함수였다면, 성공하자마자 바로 네트워크 통신을 바로 실행

// ↓ producer code
const promise = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('gothic');
    }, 2000);
});

2. consumer의 입장 code

then, catch, finally를 꼭 기억하자! ※

// 값이 정상적으로 잘 수행이 된다면 then~
promise.then((value) => {
    console.log(value);
});
// 최종적으로 resolve라는 콜백함수를 통해서 전달한 이 값이 value의 파라미터로 전달되어서 들어옴

// error라는 object를 통해서 전달 -> 무언가 에러가 발생했다는 오브젝트 (정확한 error message를 적는 게 좋다)
const promise = new Promise((resolve, reject) => {
    setTimeout(() => {
    	reject(new Error('no network'));
    }, 2000);
});

// error는 catch를 이용해서 받아야함 catch를 이용하지 않는다면, Uncaught 메시지가 발생
promise.catch(error => {
	console.log(error);
});

// chaining 
promise
    .then((value) => {
        console.log(value);
    })
    .catch((error) => {
    	console.log(error);
    })
    // 성공/실패와 상관없이 실행되는 것, 때문에 아무런 인자를 받지 않는다!
    // 즉, 성공/실패와 상관없이 어떤 기능을 마지막에 실행하고 싶을 때 사용하면 된다~
    .finally(() => {
    	console.log('finally')
    });

3. promise chaining에 대해 더 알아보자🤔

const fetchNumber = new Promise((resolve, reject) => {
	setTimeout(() => resolve(1), 1000); // 1
});

fetchNumber
	.then(num => num*2) // 2
	.then(num => num*3) // 6
	.then(num => {
    	return new Promise((resolve, reject) => {
        	setTimeout(() => resolve(num - 1), 1000); //5
        });
        })
        .then(num => console.log(num)); // 5 (최종)

then은 값을 바로 전달해도 되고, 또 다른 비동기인 promise도 전달할 수 있군!

 

 

끗🤩~~

'JavaScript' 카테고리의 다른 글

[스터디] prototype에 대해  (0) 2022.09.02
JS - typeof(null)에 대해  (0) 2022.06.23
var, let, const 차이점  (0) 2021.05.17
Comments