์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[Javascript] ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ(2): Promise โญ

๐Ÿ˜Ž ์ง€์‹ in Action/React, Typescript, Javascript ๐ŸŒ

by :ํ•ดํ”ผ๋ž˜๋น—๐Ÿพ 2021. 8. 17. 22:55

๋ณธ๋ฌธ

ํ”„๋กœ๋ฏธ์Šค๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ƒํƒœ์™€ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค.

๋”๋ณด๊ธฐ

 

// ์›น API๋ฅผ ํฌํ•จํ•˜์—ฌ Promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ ์— ํ•ด๋‹นํ•˜๋Š” ๋‚ด์šฉ

/*์˜๋„์™€๋Š” ๋‹ค๋ฅธ ์ฝ”๋“œ*/
let promise = axios.get("/api/classes")
// promise ๋ณ€์ˆ˜์— Promise object๊ฐ€ ์ €์žฅ๋จ.
// pending ์ƒํƒœ. (์„ฑ๊ณต๋„ ์‹คํŒจ๋„ ์•„๋‹Œ ์ƒํƒœ)


/*์ •์ƒ์ ์ธ ์ฝ”๋“œ1 - Promise*/
axios.get("/api/classes")
	.then(function (response) {
            console.log(response);
        })
        .catch(function (error) {
            console.log(error);
        });
// Promise Object์˜ .then()๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ 
// Promise๊ฐ€ ์„ฑ๊ณต์ ์ด๊ณ  response๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ๋งŒ ์‹คํ–‰ํ•œ๋‹ค.
// fulfiled ์ƒํƒœ. (์„ฑ๊ณต์ ์œผ๋กœ Promise๊ฐ€ ์ฒ˜๋ฆฌ๋˜์—ˆ์œผ๋ฏ€๋กœ)


/*์ •์ƒ์ ์ธ ์ฝ”๋“œ2 - async/await */
async function fetchData(){
    try{
        let response=await axios.get('/api/classes');
	    if (!response.ok){
            throw new Error(`HTTP ERROR:${response.status}`);
        }
    }catch(err){
        console.log(err)
    }
}

Promise ์ƒํƒœ

Promise๊ฐ€ ์ƒ์„ฑ

: pending ์ƒํƒœ (์„ฑ๊ณต๋„ ์‹คํŒจ๋„ ์•„๋‹Œ ์ƒํƒœ)

 

์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ Promise

: fulfiled ์ƒํƒœ


์‹คํŒจํ•œ Promise

: rejected ์ƒํƒœ , ์–ด๋–ค ์ด์œ  ๋•Œ๋ฌธ์— rejected ๋˜์—ˆ๋Š”์ง€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ํฌํ•จํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜ํ™˜(catch์—์„œ ํ™•์ธ)

 

Promise ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜

: resolved ์ƒํƒœ (Promise ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜๋งŒ ๋˜๋ฉด, ๊ฒฐ๊ณผ ์ƒ๊ด€์—†์ด)

 

Promise API (5๊ฐ€์ง€ ๋ฉ”์„œ๋“œ)

 Promise.all() 

: ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๋ชจ๋‘ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•  ๋•Œ

ํ”„๋กœ๋ฏธ์Šค๋ฅผ ์š”์†Œ๋กœ ๊ฐ–๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ”์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค. 

์ „๋‹ฌ๋ฐ›์€ ๋ชจ๋“  ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ๋ชจ๋‘ fulfilled ์ƒํƒœ๊ฐ€ ๋˜๋ฉด ๋ชจ๋“  ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์—ด์— ์ €์žฅํ•ด ์ƒˆ๋กœ์šด ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ฒซ๋ฒˆ์งธ promise๊ฐ€ resolve๋ค ์ฒ˜๋ฆฌ๊ฒฐ๊ณผ๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ๋ฐฐ์—ด์— ์ €์žฅํ•ด ๊ทธ๋ฐฐ์—ด์„ resolveํ•˜๋Š” ์ƒˆ๋กœ์šด ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ฒ˜๋ฆฌ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋œ๋‹ค. ์ „๋‹ฌ๋ฐ›์€ ๋ฐฐ์—ด์˜ ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ํ•˜๋‚˜๋ผ๋„ rejected๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ fulfilled ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์ฆ‰์‹œ ์ข…๋ฃŒํ•œ๋‹ค. ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์€ ์ดํ„ฐ๋Ÿฌ๋ธ”์˜ ์š”์†Œ๊ฐ€ ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ Promsise.resolve ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํ”„๋กœ๋ฏธ์Šค๋กœ ๋ž˜ํ•‘ํ•œ๋‹ค.

 Promise.race() 

: ๊ฐ€์žฅ ๋จผ์ € fulfilled ์ƒํƒœ๊ฐ€ ๋œ ํ”„๋กœ๋ฏธ์Šค์˜ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ resolveํ•˜๋Š” ์ƒˆ๋กœ์šด ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ „๋‹ฌ๋ฐ›์€ ๋ฐฐ์—ด์˜ ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ํ•˜๋‚˜๋ผ๋„ rejected๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ fulfilled ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์ฆ‰์‹œ ์ข…๋ฃŒํ•œ๋‹ค. 

Promise.allSettled()

: ๋ชจ๋‘ settled์ƒํƒœ(๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์ˆ˜ํ–‰๋œ ์ƒํƒœ, fulfilled or rejected)๊ฐ€ ๋˜๋ฉด, ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

fulfilled ; ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” status ํ”„๋กœํผํ‹ฐ, ์ฒ˜๋ฆฌ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” value ํ”„๋กœํผํ‹ฐ {status: , value: }

rejected ; ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” status ํ”„๋กœํผํ‹ฐ์™€ ์—๋Ÿฌ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” reason ํ”„๋กœํผํ‹ฐ {status: , reason: }

 


ํ”„๋กœ๋ฏธ์Šค์˜ ํ›„์† ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ์— ์ €์žฅ๋˜๊ณ ,

๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ๋Š” ํƒœ์Šคํฌ ํ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค.

 

728x90

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ