Ajax - Axios๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ๋ฒ• (๊ธฐ๋ณธ ๊ฐœ๋…, ๋ฌธ๋ฒ• ๊ตฌ์„ฑ, ์‘๋‹ต ๋ฐ์ดํ„ฐ, get, post, ์—๋Ÿฌ์ฒ˜๋ฆฌ, Promise)

2023. 8. 27. 18:44ใ†Study_Develop

๋ฐ˜์‘ํ˜•

 

Ajax ๋ž€?

 

์šฐ์„  Ajax๋Š” Asynchronous JavaScript And XML์˜ ์•ฝ์ž์ด๋‹ค.

Ajax์˜ ์•ฝ์ž๋ฅผ ํ† ๋Œ€๋กœ ๋ณธ๋ž˜ ์˜๋ฏธ๋ฅผ ์‚ดํŽด๋ณด๋ฉด JavaScript๋ฅผ ์‚ฌ์šฉํ•œ ๋น„๋™๊ธฐ ํ†ต์‹ , ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ธฐ์ˆ ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

html๊ฐ€ ์—ฌํƒ€ ๊ธฐ์ˆ ๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ์ƒˆ๋กœ์šด ์ ‘๊ทผ๋ฒ•์ด๋ผ๊ณ  ์„ค๋ช…ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

 

Ajax๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์™€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ํ†ต์‹ ํ•จ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ์ „์ฒด ์›น ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋™๊ธฐ ๋ฐฉ์‹๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์ ์ง„์ ์œผ๋กœ ํ•ด๋‹น ๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•ด Ajax๋Š” js์—์„œ ๋น„๋™๊ธฐ httpํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.

 

๋น„๋™๊ธฐ httpํ†ต์‹ ์ด๋ž€ response์™€ request๋ฅผ ๋น„๋™๊ธฐ ์‹์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ

 

์ฆ‰, ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋™ํ•˜๊ณ  ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ ์žˆ์–ด ํ™”๋ฉด ๊ฐฑ์‹  ์—†์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

์ด๊ฑธ ์™œ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ๊นŒ?

 

- ๋‹จ์ˆœํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด WEBํ™”๋ฉด์—์„œ ๋ฌด์—‡์ธ๊ฐ€ ๋ถ€๋ฅด๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ณ  ์‹ถ์„๋•Œ ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜๊ณ  ์‹ถ์ง€ ์•Š์•„์„œ๋ผ๊ณ  ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐ์ดํ„ฐ์˜ ํ˜•์‹์œผ๋กœ๋Š” ํฌ๊ฒŒ, csv, json, xml ํ˜•์‹์ด๋‹ค.

 

 

AJAX๋กœ GET/ POST์š”์ฒญ ํ•˜๋Š” ๋ฐฉ๋ฒ• 3๊ฐ€์ง€ 

- XMLHttpRequest ๋ผ๋Š” ์˜›๋‚  ๋ฌธ๋ฒ• ์“ฐ๊ธฐ

- fetch () ๋ผ๋Š” ์ตœ์‹  ๋ฌธ๋ฒ• ์“ฐ๊ธฐ

- axios๊ฐ™์€ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์“ฐ๊ธฐ

 

Axios ๋ž€?

 

- ์šด์˜ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋ธŒ๋ผ์šฐ์ €์˜ xml http Request ๊ฐ์ฒด ๋˜๋Š” Node.js์˜ http api์‚ฌ์šฉ

 

- Promise(ES6) api ์‚ฌ์šฉ

 

- ์š”์ฒญ๊ณผ ์‘๋‹ต ๋ฐ์ดํ„ฐ์˜ ๋ณ€ํ˜•

 

- http์š”์ฒญ ์ทจ์†Œ

 

- http ์š”์ฒญ๊ณผ ์‘๋‹ต์„ jsonํ˜•ํƒœ๋กœ ์ž๋™ ๋ณ€๊ฒฝ

 

npm install axios

 

์ผ๋‹จ axios๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์„ค์น˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค!

 

ํด๋ผ์ด์–ธํŠธ(html) ์—์„œ axios๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, (jsDeliver/ unpkg CDN ๋‘˜ ์ค‘ ํƒ)

<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>

 

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

 

์œ„์˜ ์ฝ”๋“œ๋ฅผ ์ ์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

 

Axios๋Š” Promise based HTTP client for the browser and node.js
์ฆ‰, node.js์™€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์œ„ํ•œ HTTPํ†ต์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.
๋น„๋™๊ธฐ๋กœ HTTP ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋ฉฐ return์„ promise ๊ฐ์ฒด๋กœ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— response ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ๋„ ์‰ฝ๋‹ค.

 

Axios ๋ฌธ๋ฒ• ๊ตฌ์„ฑ

 

axios ์š”์ฒญ(request) ํŒŒ๋ผ๋ฏธํ„ฐ ์˜ต์…˜

 

- method : ์š”์ฒญ ๋ฐฉ์‹ ( get ์ด ๋””ํดํŠธ์ž„.)

 

- url : ์„œ๋ฒ„ ์ฃผ์†Œ

 

- baseURL : url์„ ์ƒ๋Œ€๊ฒฝ๋กœ๋กœ ์“ธ ๋•Œ url ๋งจ ์•ž์— ๋ถ™๋Š” ์ฃผ์†Œ

 

- headers : ์š”์ฒญ ํ—ค๋”

 

- data: ์š”์ฒญ ๋ฐฉ์‹์ด put, post, patch ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ body์— ๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ

 

- params : url ํŒŒ๋ผ๋ฏธํ„ฐ (?key= value ๋กœ ์š”์ฒญํ•˜๋Š” url get ๋ฐฉ์‹์„ ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ)

 

- timeout : ์š”์ฒญ timeout์ด ๋ฐœ๋™ ๋˜๊ธฐ ์ „ milliseconds์˜ ์‹œ๊ฐ„์„ ์š”์ฒญ. timeout๋ณด๋‹ค ์š”์ฒญ์ด ๊ธธ์–ด์ง„๋‹ค๋ฉด, ์š”์ฒญ์€ ์ทจ์†Œ๋˜๊ฒŒ ๋œ๋‹ค.

 

- responseType : ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•ด์ฃผ๋Š” ๋ฐ์ดํ„ฐ์˜ ํƒ€์ž… ์ง€์ •

 

- responseEncoding : ๋””์ฝ”๋”ฉ ์‘๋‹ต์— ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ธ์ฝ”๋”ฉ (utf-8)

 

- transformRequest : ์„œ๋ฒ„์— ์ „๋‹ฌ๋˜๊ธฐ ์ „์— ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

 

- withCredentials : cross-site access-control ์š”์ฒญ์„ ํ—ˆ์šฉ ์œ ๋ฌด, ์ด๋ฅผ true๋กœ ํ•˜๋ฉด cross-origin์œผ๋กœ ์ฟ ํ‚ค ๊ฐ’์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

- auth : http ์˜ ๊ธฐ๋ณธ ์ธ์ฆ์— ์‚ฌ์šฉ. auth๋ฅผ ํ†ตํ•ด์„œ http์˜ ๊ธฐ๋ณธ ์ธ์ฆ์ด ๊ตฌ์„ฑ ๊ฐ€๋Šฅ

 

- maxContextLength : http์‘๋‹ต ๋‚ด์šฉ์˜ max์‚ฌ์ด์ฆˆ๋ฅผ ์ง€์ •ํ•˜๋„๋ก ํ•˜๋Š” ์˜ต์…˜

 

- validataStatus : http์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ์— ๋Œ€ํ•ด promise์˜ ๋ฐ˜ํ™˜ ๊ฐ’์ด resolve ๋˜๋Š” reject ํ• ์ง€ ์ง€์ •ํ•˜๋Š” ์˜ต์…˜

 

- httpAgent/ httpsAgent : node.js์—์„œ http ๋‚˜ https๋ฅผ ์š”์ฒญ์„ ํ•  ๋•Œ ์‚ฌ์šฉ์ž ์ •์˜ agent๋ฅผ ์ •์˜ํ•˜๋Š” ์˜ต์…˜

 

- proxy : proxy ์„œ๋ฒ„์˜ hostname๊ณผ port๋ฅผ ์ •์˜ํ•˜๋Š” ์˜ต์…˜

 

- cancelToken : ์š”์ฒญ์„ ์ทจ์†Œํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜์–ด ์ง€๋Š” ์ทจ์†Œ ํ† ํฐ์„ ๋ช…์‹œ

 

 

axios ์‘๋‹ต (response) ๋ฐ์ดํ„ฐ

 

axios๋ฅผ ํ†ตํ•ด ์š”์ฒญ์„ ์„œ๋ฒ„์—๊ฒŒ ๋ณด๋‚ด๋ฉด, ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ๋‹ค์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ตํ•˜๊ฒŒ ๋œ๋‹ค.

 

์ด๋ฅผ .then์œผ๋กœ ํ•จ์ˆ˜์ธ์ž๋กœ (response)๋กœ ๋ฐ›์•„ ๊ฐ์ฒด์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋กœ ์‘๋‹ต ๋ฐ์ดํ„ฐ์ด๋‹ค.

 

ajax๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›๋Š” ์‘๋‹ต์˜ ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

axios({
    method: "get", // ํ†ต์‹  ๋ฐฉ์‹
    url: "www.naver.com", // ์„œ๋ฒ„
})
.then(function(response) {
  console.log(response.data)
  console.log(response.status)
  console.log(response.statusText)
  console.log(response.headers)
  console.log(response.config)
})
response.data: {}, // ์„œ๋ฒ„๊ฐ€ ์ œ๊ณตํ•œ ์‘๋‹ต(๋ฐ์ดํ„ฐ)

response.status: 200, // `status`๋Š” ์„œ๋ฒ„ ์‘๋‹ต์˜ HTTP ์ƒํƒœ ์ฝ”๋“œ

response.statusText: 'OK',  // `statusText`๋Š” ์„œ๋ฒ„ ์‘๋‹ต์œผ๋กœ ๋ถ€ํ„ฐ์˜ HTTP ์ƒํƒœ ๋ฉ”์‹œ์ง€

response.headers: {},  // `headers` ์„œ๋ฒ„๊ฐ€ ์‘๋‹ต ํ•œ ํ—ค๋”๋Š” ๋ชจ๋“  ํ—ค๋” ์ด๋ฆ„์ด ์†Œ๋ฌธ์ž๋กœ ์ œ๊ณต

response.config: {}, // `config`๋Š” ์š”์ฒญ์— ๋Œ€ํ•ด `axios`์— ์„ค์ •๋œ ๊ตฌ์„ฑ(config)

response.request: {}
// `request`๋Š” ์‘๋‹ต์„ ์ƒ์„ฑํ•œ ์š”์ฒญ
// ๋ธŒ๋ผ์šฐ์ €: XMLHttpRequest ์ธ์Šคํ„ด์Šค
// Node.js: ClientRequest ์ธ์Šคํ„ด์Šค(๋ฆฌ๋””๋ ‰์…˜)

 

axios ๊ธฐ๋ณธ ํ˜•์‹
axios({
  method: 'post',
  url: '/user/12345',
  data: {
    firstName: 'Ziihyun',
    lastName: 'Lim'
  }
});

-> ๊ธฐ๋ณธ ํ˜•์‹

import axios from 'axios'

function App(){
  return (
    <button onClick={()=>{
      axios.get('url์ฃผ์†Œ').then((๊ฒฐ๊ณผ)=>{
        console.log(๊ฒฐ๊ณผ.data)
      })
      .catch(()=>{
        console.log('์‹คํŒจํ•จ')
      })
    }}>๋ฒ„ํŠผ</button>
  )
}

 

1. axios๋ฅผ ์“ฐ๋ ค๋ฉด ์ƒ๋‹จ์—์„œ importํ•ด์˜ค๊ณ 

2. axios.get(URL) ์ด๋Ÿฌ๋ฉด ๊ทธ URL๋กœ GET์š”์ฒญ์ด ๋œ๋‹ค.

3. ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜จ ๊ฒฐ๊ณผ๋Š” ๊ฒฐ๊ณผ.data ์•ˆ์— ๋“ค์–ด์žˆ๋‹ค. 

๊ทธ๋ž˜์„œ ์œ„์˜ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฝ˜์†”์ฐฝ์— ์ถœ๋ ฅ๋œ๋‹ค. 

 

4. ์ธํ„ฐ๋„ท์ด ์•ˆ๋˜๊ฑฐ๋‚˜ URL์ด ์ด์ƒํ•˜๋ฉด ์‹คํŒจํ•˜๋Š”๋ฐ

์‹คํŒจํ–ˆ์„ ๋•Œ ์‹คํ–‰ํ•  ์ฝ”๋“œ๋Š” .catch() ์•ˆ์— ์ ์œผ๋ฉด ๋œ๋‹ค.

 

axios GET

 

get ๋ฉ”์„œ๋“œ์—๋Š” 2๊ฐ€์ง€ ์ƒํ™ฉ์ด ์กด์žฌํ•จ.

 

1. ๋‹จ์ˆœ ๋ฐ์ดํ„ฐ (ํŽ˜์ด์ง€ ์š”์ฒญ, ์ง€์ •๋œ ์š”์ฒญ) ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ๊ฒฝ์šฐ

 

2. ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ๊ฒฝ์šฐ (์‚ฌ์šฉ์ž ๋ฒˆํ˜ธ์— ๋”ฐ๋ฅธ ์กฐํšŒ)

 

// user์—๊ฒŒ ํ• ๋‹น๋œ id ๊ฐ’๊ณผ ํ•จ๊ป˜ ์š”์ฒญ์„ ํ•ฉ๋‹ˆ๋‹ค.
axios.get('/user?ID=12345')
  .then(function (response) {
    // ์„ฑ๊ณตํ–ˆ์„ ๋•Œ
    console.log(response);
  })
  .catch(function (error) {
    // ์—๋Ÿฌ๊ฐ€ ๋‚ฌ์„ ๋•Œ
    console.log(error);
  })
  .finally(function () {
    // ํ•ญ์ƒ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜
  });

 

axios POST

 

post ๋ฉ”์„œ๋“œ์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ Message Body ์— ํฌํ•จ์‹œ์ผœ ๋ณด๋‚ธ๋‹ค.

 

axios.post("url", {
		firstName: 'Fred',
		lastName: 'Flintstone'
    })
    .then(function (response) {
        // response  
    }).catch(function (error) {
        // ์˜ค๋ฅ˜๋ฐœ์ƒ์‹œ ์‹คํ–‰
    })

 

AJAX ์š”์ฒญ์„ ๋™์‹œ์— ์—ฌ๋Ÿฌ๊ฐœ ๋‚ ๋ฆฌ๋ ค๋ฉด?

 

Promise.all([axios.get('URL1', axios.get('URL2')])

 

-> url1, url2 ๋กœ get์š”์ฒญ์„ ๋™์‹œ์— ์ง„ํ–‰ํ•œ๋‹ค.

 

๋‘˜ ๋‹ค ์™„๋ฃŒ์‹œ ํŠน์ • ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์œผ๋ฉด .then()๋’ค์— ๋ถ™์ด๋ฉด ๋œ๋‹ค.

 

Promise.all()

 

Promise.all()์€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ๋ฏธ์Šค(Promise)๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ Promise์ฒ˜๋ฆฌ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ณ ์ž ํ•  ๋•Œ, ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

 

async function sampleFunc(): Promise<void> {
    // time start
    console.time('promise all example');

    // first promise
    const fetchNameList = async (): Promise<string[]> => {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
              const result: any = ['Jack', 'Joe', 'Beck'];
              resolve(result);
            }, 300);
        });
    };

    // second promise
    const fetchFruits = async (): Promise<string[]> => {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
              const result: any = ['Apple', 'Orange', 'Banana'];
              resolve(result);
            }, 200);
        });
    };

    // third promise
    const fetchTechCompanies = async (): Promise<string[]> => {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
              const result: any = ['Apple', 'Google', 'Amazon'];
              resolve(result);
            }, 400);
        });
    };

    // promise all
    const result: any[] = await Promise.all([
        fetchNameList(),
        fetchFruits(),
        fetchTechCompanies(),
    ]);

    // time end
    console.timeEnd('promise all example');

    console.log('%j', result);
}

// execute
sampleFunc();

 

-> ํ•ด๋‹น ์ฝ”๋“œ์˜ ์ „์ฒด ์‹คํ–‰ ์‹œ๊ฐ„์€ 402ms์ด๋‹ค. ๊ฐ Promise๋“ค์˜ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„(300ms, 200ms, 400ms) ์ค‘ ๊ฐ€์žฅ ๊ธด ์‹œ๊ฐ„์ธ 400ms์™€ ๋น„์Šทํ•œ ์‹œ๊ฐ„์ด๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋น„๋™๊ธฐ ์ ์œผ๋กœ ์‹คํ–‰๋˜์—ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

์—๋Ÿฌ ์ฒ˜๋ฆฌ

Promise.all() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ! 

 

ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ Promise๋“ค์ด ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ์ค‘ ํ•˜๋‚˜๋ผ๋„ reject๊ฐ€ ๋˜๊ฑฐ๋‚˜ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, ๋ชจ๋“  Promise๋“ค์ด reject ๋œ๋‹ค. 

 

 

// third promise
const fetchTechCompanies = async (): Promise<string[]> => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const result: any = ['Apple', 'Google', 'Amazon'];
      reject(result);
    }, 400);
  });
};
Error: thrown: Array [
  "Apple",
  "Google",
  "Amazon",
]

 

-> ์ถœ๋ ฅ ๊ฒฐ๊ณผ

 

๋”ฐ๋ผ์„œ, Promise.all()์„ ์‚ฌ์šฉํ•  ๋•Œ ์—๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ๊ฐ€๋ฅผ ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

 

// result 
let result: any[] = [];

// parameter array
const promiseList: any[] = [
  fetchNameList(),
  fetchFruits(),
  fetchTechCompanies(),
];

// try ~ catch
try {
  result = await Promise.all(promiseList);
} catch (e) {
	// default value: empty array
  result = Array(promiseList.length).fill([]);
  console.error('promise-all', e);
}

 

-> ์„ธ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋น„๋™๊ธฐ ํ•จ์ˆ˜(fetchNameList, fetchFruits, fetchTechCompanies)๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•˜๊ณ , ๋ชจ๋“  Promise๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ๋‹ค์Œ ๊ฒฐ๊ณผ๋ฅผ result ๋ฐฐ์—ด์— ์ €์žฅํ•˜๋Š” JavaScript ์ฝ”๋“œ์ด๋‹ค.

 

 

 

object / array ์ž๋ฃŒ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฒ•

 

object/ array ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์œผ๋ ค๋ฉด ๋”ฐ์˜ดํ‘œ๋ฅผ ์ณ์„œ ๋ณด๋‚ด๋ฉด ๋œ๋‹ค.

 

"{"name" : "kim"}"
 ์ด๋Ÿฐ๊ฑธ json์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

json์€ ๋ฌธ์ž ์ทจ๊ธ‰์„ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์™€ ์ž์œ ๋กญ๊ฒŒ ์ฃผ๊ณ ๋ฐ›๋Š”๋‹ค.

 

์‹ค์ œ๋กœ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด (๊ฒฐ๊ณผ.data) ๋”ฐ์˜ดํ‘œ ์ณ์ง„ json์ด ๋‚˜์™€์•ผ ํ•˜๋Š”๋ฐ,

axios๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” json์„ object/ array ๋ณ€ํ™˜์ž‘์—…์„ ์ž๋™์œผ๋กœ ๊ฑฐ์น˜๊ณ  ์ถœ๋ ฅ๋˜๊ธฐ ๋•Œ๋ฌธ์—

object/ array๊ฐ€ ์ถœ๋ ฅ ๋œ๋‹ค.

 

 

Fetch

 

fetch๋Š” ES6๋ถ€ํ„ฐ JavaScript์˜ ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋“ค์–ด์™”๋‹ค.
promise๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๊ธฐ์— Axios์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š”๋ฐ ์–ด๋ ต์ง€ ์•Š์œผ๋ฉฐ, ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๋Š” ์žฅ์ ์œผ๋กœ ์ธํ•ด ์ƒ๋‹นํžˆ ํŽธ๋ฆฌํ•˜์ฃ . ์ฝ”๋“œ ๋˜ํ•œ ๊ฐ„๋‹จ๋‹ค.

 

//fetch
const url ='http://localhost3000/test`
const option ={
   method:'POST',
   header:{
     'Accept':'application/json',
     'Content-Type':'application/json';charset=UTP-8'
  },
  body:JSON.stringify({
  	name:'zihyun',
    	age:22
  })

  fetch(url,options)
  	.then(response => console.log(response))

 

-> fecth ์˜ post method ๊ตฌํ˜„

 

 

 

์ฐธ๊ณ >

 

https://inpa.tistory.com/entry/AXIOS-%F0%9F%93%9A-%EC%84%A4%EC%B9%98-%EC%82%AC%EC%9A%A9

 

๐Ÿ“š AXIOS ์„ค์น˜ & ํŠน์ง• & ๋ฌธ๋ฒ• ๐Ÿ’ฏ ์ •๋ฆฌ

Axios ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Axios๋Š” ๋ธŒ๋ผ์šฐ์ €, Node.js๋ฅผ ์œ„ํ•œ Promise API๋ฅผ ํ™œ์šฉํ•˜๋Š” HTTP ๋น„๋™๊ธฐ ํ†ต์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์•„๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ๋ฐฑ์—”๋“œ๋ž‘ ํ”„๋ก ํŠธ์—”๋“œ๋ž‘ ํ†ต์‹ ์„ ์‰ฝ๊ฒŒํ•˜๊ธฐ ์œ„ํ•ด Ajax์™€ ๋”๋ถˆ์–ด ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋ฏธ

inpa.tistory.com