# Promises
A Promise is an object representing the eventual completion or failure of an asynchronous operation. It is one way to solve callback hell.
A promise is a returned object to which you attach callbacks instead of passing callbacks into a function.
# How to make a Promise
const willGetYouADog = new Promise((resolve, reject) => {
})
1
2
2

status is "pending" by default.
const willGetYouADog = new Promise((resolve, reject) => {
	reject()
})
1
2
3
2
3

const willGetYouADog = new Promise((resolve, reject) => {
	resolve()
})
1
2
3
2
3

.then will run if status is resolved
.catch will run if status is rejected
const willGetYouADog = new Promise((resolve, reject) => {
	resolve()
}).then(()=>{
  console.log("yes")
}).catch(()=>{
  console.log("no")
})
1
2
3
4
5
6
7
2
3
4
5
6
7
# Returning Promise from a Function
const makePromise = ()=>{
  return new Promise((resolve, reject) => {
	resolve()
})
    
makePromise()
  .then(()=>{
    console.log("yes")
  })
  .catch(()=>{
    console.log("no")
  })
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# Resolving/Rejecting with Value
- Without Value
const fakeRequest = (url) => {
  return new Promise((resolve, reject) => {
    const rand = Math.random()
    if(rand<0.3){
      reject();
    }
    else{
      resolve()
    }
  })
}
fakeRequest()
.then(()=>{
  console.log("good")
})
.catch(()=>{
  console.log('baad')
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- With Value
const fakeRequest = (url) => {
  return new Promise((resolve, reject) => {
    const rand = Math.random()
    if(rand<0.3){
      reject({status:404});
    }
    else{
      const pages = {
        '/users': [
          {id:1, username:'ki'}
        ],
        '/about':"about page"
      };
      const data = pages[url]
      resolve({status:200, data})
    }
  })
}
fakeRequest('/users')
.then(()=>{
  console.log(res.status) //200
  console.log(res.data) //[id:1, username:'ki']
  console.log("good")
})
.catch((res)=>{
  console.log(res.status)  //404
  console.log('baad')
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# Promise Chain
1
# Axios
1
