# 02. 직접 만들어보는 Promise 객체

## 🙋‍♂️ 직접 만들어보는 Promise 객체

![](https://3843212257-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LqOIAZJ26UmArDUcS8p%2F-Mcso8RkBSKMAswjnXKK%2F-McspAN8xYlfUVROWsH9%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-06-23%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%209.24.50.png?alt=media\&token=ed2644f7-a7f6-4a09-ad6b-74a97455d460)

01\) fetch, then, catch\[Promise] 이해하기 설명문에서는 \
fetch 함수에서 리턴되는 promise 객체를 사용했습니다. \
그런데 사실 이렇게 어떤 함수가 리턴하는 promise객체를 가져다가 쓰는것이 아니라, \
직접 promise 객체를 생성하는것도 가능 합니다.

이번에는 직접 promise객체를 만드는 방법에 대해서 알아보겠습니다.<br>

아래 코드가 바로 promise 객체를 직접 생성하는 코드 입니다.

```javascript
//  promise 객체를 직접 생성하는 코드

const p = new Promise((resolve, reject) => {

});
```

바로 이 부분이  promise 객체를 생성합니다.&#x20;

![](https://3843212257-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LqOIAZJ26UmArDUcS8p%2F-Mcso8RkBSKMAswjnXKK%2F-Mcsq_bowJbbQvHOLZzY%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-06-23%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%209.31.02.png?alt=media\&token=5d03b105-0c5f-40a1-a21e-f8a582c5dd23)

여기서 중요한것은 파라미터로 들어간 'executor'라는 함수 입니다. \
또 함수 파라미터에는 resolve, reject가 있습니다. 이 2 파라미터는 아주 특별한 의미가 있습니다.&#x20;

![](https://3843212257-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LqOIAZJ26UmArDUcS8p%2F-Mcso8RkBSKMAswjnXKK%2F-Mcsr0OqtQJofczn_HjT%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-06-23%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%209.32.55.png?alt=media\&token=ab0a6a2a-b8f0-4717-bcd0-a35af781fa49)

setTimeout함수를 써서 2초 후에 resolve 함수로 연결된 파라미터를 실행하도록 했습니다. \
**resolve 함수는 promise 객체를 fulfilled상태로 만드는 함수 입니다.**&#x20;

## promise 객체를 **fulfilled상태로 만들어 보겠습니다.**

```javascript
const p = new Promise((resolve, reject) => {
    setTimeout(() => {resolve('success');}, 2000);
});
```

그렇다면  p라는 promise 객체가 2초후에 **fulfilled상태로 된다는 뜻입니다.** \
**그리고 이때 resolve 함수안에 넣은 'success'문자열이 작업성공 결과가 됩니다.**&#x20;

```javascript
const p = new Promise((resolve, reject) => {
    setTimeout(() => {resolve('success');}, 2000);
});

p.then((result) => {console.log(result);});
```

```javascript
// 결과) 2초 후에 
success
```

## 이번에는  Promise 객체를 **reject상태로 만들어 보겠습니다.**

**reject함수는 생성되는  promise 객체를 reject상태로 만듭니다.** \
**그리고 reject함수에 아규먼트로 에러객체가 작업 실패 정보가 됩니다.**&#x20;

```javascript
const p = new Promise((resolve, reject) => {
    // setTimeout(() => {resolve('success');}, 2000);
    setTimeout(() => {reject(new Error('fail')); }, 2000); //resolve험수를 reject함수로 바꿨습니다. 
});

p.catch((error) => {console.log(error);});
```

```javascript
// 결과) 2초 후에 
Error: fail
```

이번에는 간단한 Promise 객체를 직접 만들어 보었습니다.<br>
