๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“• STUDY/Node.js

[Node.js๋กœ ์„œ๋ฒ„๋งŒ๋“ค๊ธฐ] 2. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ณธ ๋ฌธ๋ฒ• (์ฝœ๋ฐฑ ํ•จ์ˆ˜/Promise/async/await)

โœ… ์ฝœ๋ฐฑ ํ•จ์ˆ˜

 

์ฝœ๋ฐฑ์ด๋ž€?

๋‚˜์ค‘์— ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ

 

์˜ˆ์‹œ

1) A()๋ผ๋Š” ํ•จ์ˆ˜์— ์ธ์ž๋กœ ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์คŒ.

(์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•จ์ˆ˜๋Š” '์ผ๊ธ‰ ๊ฐ์ฒด'์ด๋ฏ€๋กœ ์ธ์ž๋กœ ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•จ)

2) A ํ•จ์ˆ˜์˜ ๋ชจ๋“  ๋ช…๋ น์„ ์‹คํ–‰ํ•œ ํ›„ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋„˜๊ฒจ ๋ฐ›์€ ์ธ์ž callback์„ ์‹คํ–‰ํ•จ.

โžก ์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด '์ฝœ๋ฐฑ'์ด๊ณ , ์—ฌ๊ธฐ์„œ ์ธ์ž๋กœ ๋“ค์–ด๊ฐ€๋Š” ํ•จ์ˆ˜๊ฐ€ '์ฝœ๋ฐฑ ํ•จ์ˆ˜'

๐Ÿ’ก ์šฉ์–ด ์ •๋ฆฌ ๐Ÿ’ก
์ผ๊ธ‰ ๊ฐ์ฒด
: ๋‹ค๋ฅธ ๊ฐ์ฒด์— ์ผ๋ฐ˜์ ์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ์„ ๋ชจ๋‘ ์ง€์›ํ•˜๋Š” ๊ฐ์ฒด

์ผ๊ธ‰ ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ธ์ž(ํŒŒ๋ผ๋ฏธํ„ฐ)๋กœ ๋„ฃ์„ ์ˆ˜ ์žˆ๊ณ , ๋ฐ˜ํ™˜ ๊ฐ’์œผ๋กœ๋„ ์“ฐ์ด๋ฉฐ, ๋ณ€์ˆ˜ ์•ˆ์— ๋„ฃ์„ ์ˆ˜๋„ ์žˆ์Œ.

 

1. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ

 

setTimeout(callback, delayTime)

: ์ฝœ๋ฐฑ ํ•จ์ˆ˜์™€ ์ง€์ฒดํ•  ์‹œ๊ฐ„์„ ์ธ์ž๋กœ ๋ฐ›์•„, ์ธ์ž๋กœ ๋ฐ›์€ ์‹œ๊ฐ„๋งŒํผ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ•จ์ˆ˜ (JS ๋‚ด์žฅํ•จ์ˆ˜)

 

1) ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ

/* sample 17 */
// 1๋ฒˆ ํ•จ์ˆ˜
setTimeout(()=>{
    console.log('todo: First Work!');
}, 3000);

// 2๋ฒˆ ํ•จ์ˆ˜
setTimeout(()=>{
    console.log('todo: Second Work!');
}, 2000);

// ์ถœ๋ ฅ๊ฒฐ๊ณผ
/*
todo: Second Work!
todo: First Work!
*/

- First work! ๋กœ๊ทธ๋ฅผ ์ฐ๋Š” 1๋ฒˆ ํ•จ์ˆ˜๋ฅผ ๋จผ์ € ํ˜ธ์ถœํ•จ

- ๊ทธ๋Ÿฌ๋‚˜ 1๋ฒˆ ํ•จ์ˆ˜๋Š” ์ง€์ฒดํ•  ์‹œ๊ฐ„์ด 3000ms์ด๊ณ  2๋ฒˆ ํ•จ์ˆ˜๋Š” 2000ms ์ด๊ธฐ ๋•Œ๋ฌธ์—

   1๋ฒˆ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  2๋ฒˆ ๋จผ์ € ์ถœ๋ ฅํ•จ.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ด๋ฒคํŠธ ์ค‘์‹ฌ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์—
์–ด๋–ค ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ ,
๋‹ค์Œ ์ด๋ฒคํŠธ๋ฅผ ๊ณ„์†ํ•ด์„œ ์‹คํ–‰ํ•จ.

 

2) ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ๋™๊ธฐ ์ฒ˜๋ฆฌ

/* sample 18 */
// 1๋ฒˆ ํ•จ์ˆ˜
setTimeout(()=>{
    setTimeout(()=>{ // 2๋ฒˆ ํ•จ์ˆ˜
        console.log('todo: Second Work!');
    }, 2000);
    console.log('todo: First work!');
}, 3000);

// ์ถœ๋ ฅ๊ฒฐ๊ณผ
/*
todo: First work!
todo: Second Work!
*/

- ์ฝœ๋ฐฑํ•จ์ˆ˜๋กœ 2๋ฒˆ setTimeout()์„ ๋ณด๋ƒ„

- 3000ms ์žˆ๋‹ค๊ฐ€ 2๋ฒˆ ํ•จ์ˆ˜๋ฅผ ๋ณด๋‚ด๊ณ , 'First work' ์ถœ๋ ฅ

- 2000ms ์žˆ๋‹ค๊ฐ€ 2๋ฒˆ ํ•จ์ˆ˜์˜ 'Second work' ์ถœ๋ ฅ

โžก ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, '์ฝœ๋ฐฑ ํ•จ์ˆ˜'๋ฅผ ์ด์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ์ž‘์—…์„ ๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ค˜์•ผํ•จ.

 

2. API vs ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜

1) ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜์˜ ๋™๊ธฐ ์ฒ˜๋ฆฌ

/* sample 19 */
function fakeSetTimeout(callback){
    callback();
}

// 1๋ฒˆ
console.log(0);

// 2๋ฒˆ
fakeSetTimeout(function(){
    console.log('Hello');
});

// 3๋ฒˆ
console.log(1);

// ์ถœ๋ ฅ ๊ฒฐ๊ณผ
/*
0
Hello
1
*/

- 1๋ฒˆ ์ฝœ์Šคํƒ์—์„œ ์‹คํ–‰

- 2๋ฒˆ ์ฝœ์Šคํƒ์—์„œ ์‹คํ–‰

-3๋ฒˆ ์ฝœ์Šคํƒ์—์„œ ์‹คํ–‰

โžก ์ฝœ๋ฐฑ ํ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋จ.

 

2) API์˜ ๋น„๋™๊ธฐ์  ์ฒ˜๋ฆฌ

/* sample 20 */

// 1๋ฒˆ
console.log(0);

// 2๋ฒˆ
setTimeout(function(){
    console.log('Hello');
}, 0);

// 3๋ฒˆ
console.log(1);

// ์ถœ๋ ฅ ๊ฒฐ๊ณผ
/*
0
1
Hello
*/

- 1๋ฒˆ ์ฝœ์Šคํƒ์—์„œ ์‹คํ–‰

- 2๋ฒˆ์€ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์ด๋ฏ€๋กœ ์ฝœ๋ฐฑ ํ๋กœ ๋“ค์–ด๊ฐ.

- 3๋ฒˆ ์ฝœ์Šคํƒ์—์„œ ์‹คํ–‰

- ์ฝœ์Šคํƒ์ด ๋น„์—ˆ์œผ๋ฏ€๋กœ ์ฝœ๋ฐฑ ํ์— ๋“ค์–ด๊ฐ„ 2๋ฒˆ ์‹คํ–‰

 

3) ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ

- ๋™๊ธฐ์  ์ž‘์—…์€ ๋ชจ๋‘ '์ฝœ ์Šคํƒ'์œผ๋กœ ๋“ค์–ด๊ฐ€ ์ฒ˜๋ฆฌ๋จ.
- ๋น„๋™๊ธฐ์  ์ž‘์—…์€ ๋ชจ๋‘ '์ฝœ๋ฐฑ ํ'์— ๋„ฃ๊ณ , '์ฝœ ์Šคํƒ'์ด ๋น„์–ด์•ผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ.

๋‚ด๋ถ€์—์„œ ์ฒ˜๋ฆฌ๋˜๋Š” ์—ฐ์‚ฐ - ๋™๊ธฐ์  ์ฒ˜๋ฆฌ
์™ธ๋ถ€์—์„œ ์ฒ˜๋ฆฌ๋˜๋Š” ์—ฐ์‚ฐ(์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ, ํƒ€์ด๋จธ ๋“ฑ์˜ ์™ธ๋ถ€ API) - ๋น„๋™๊ธฐ์  ์ฒ˜๋ฆฌ

โžก ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฐ”์œ ์›น ํ™˜๊ฒฝ์—์„œ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋น„๋™๊ธฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•จ!

โžก '์ฝœ๋ฐฑ ์ง€์˜ฅ'์— ๋น ์ง€์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผ ํ•จ.


โœ… Promise

 

Promise๋ž€?

๋ณด๋‚ธ ์š”์ฒญ์— ๋Œ€ํ•ด ์‘๋‹ต์ด ์ค€๋น„๋˜์—ˆ์„ ๋•Œ ์•Œ๋ฆผ์„ ์ฃผ๋Š” ์—ญํ• !

 

1. ์ผ๋ฐ˜์ ์ธ ๋น„๋™๊ธฐ์˜ ๋™๊ธฐ์  ์ฒ˜๋ฆฌ

1) ์ผ๋ฐ˜ ๋น„๋™๊ธฐ ํ•จ์ˆ˜

/* sample 21-1 */
function work(sec, callback){
    setTimeout(()=>{
        callback(new Date().toISOString());
    }, sec * 1000);
};

work(1, (result)=>{
    console.log('์ฒซ ๋ฒˆ์งธ ์ž‘์—…', result);
});

work(1, (result) =>{
    console.log('๋‘ ๋ฒˆ์งธ ์ž‘์—…', result);
});

work(1, (result) =>{
    console.log('์„ธ ๋ฒˆ์งธ ์ž‘์—…', result);
});

// ์ถœ๋ ฅ ๊ฒฐ๊ณผ
/*
์ฒซ ๋ฒˆ์งธ ์ž‘์—… 2022-08-18T06:06:25.739Z
๋‘ ๋ฒˆ์งธ ์ž‘์—… 2022-08-18T06:06:25.748Z
์„ธ ๋ฒˆ์งธ ์ž‘์—… 2022-08-18T06:06:25.748Z
*/

 

์ฐจ๋ก€๋กœ ์ถœ๋ ฅ์ด ๋˜๊ธด ํ•˜์ง€๋งŒ, ๋ชจ๋‘ ๊ฐ™์€ ์‹œ๊ฐ„์— ์ž‘์—…์ด ๋๋‚จ.

 

2) ๋™๊ธฐ์  ์ฒ˜๋ฆฌ - 1

/* sample 21-2 */
function work(sec, callback){
    setTimeout(()=>{
        callback(new Date().toISOString());
    }, sec * 1000);
};

work(1, (result)=>{
    console.log('์ฒซ ๋ฒˆ์งธ ์ž‘์—…', result);

    work(1, (result) =>{
        console.log('๋‘ ๋ฒˆ์งธ ์ž‘์—…', result);

        work(1, (result) =>{
            console.log('์„ธ ๋ฒˆ์งธ ์ž‘์—…', result);
        });
    });
});

// ์ถœ๋ ฅ ๊ฒฐ๊ณผ
/*
์ฒซ ๋ฒˆ์งธ ์ž‘์—… 2022-08-18T06:14:47.375Z
๋‘ ๋ฒˆ์งธ ์ž‘์—… 2022-08-18T06:14:48.396Z
์„ธ ๋ฒˆ์งธ ์ž‘์—… 2022-08-18T06:14:49.400Z
*/

- ์ฒซ ๋ฒˆ์งธ ์ž‘์—…์ด ๋๋‚จ.

- 1์ดˆ ๋’ค์— ๋‘ ๋ฒˆ์งธ ์ž‘์—…์ด ๋๋‚จ.

- 1์ดˆ ๋’ค์— ์„ธ ๋ฒˆ์งธ ์ž‘์—…์ด ๋๋‚จ.

 

3) ๋™๊ธฐ์  ์ฒ˜๋ฆฌ - 2

/* sample 21-3 */
function work(sec, callback){
    setTimeout(()=>{
        callback(new Date().toISOString());
    }, sec * 1000);
};

work(1, (result)=>{
    console.log('์ฒซ ๋ฒˆ์งธ ์ž‘์—…', result);

    work(1, (result) =>{

        work(1, (result) =>{
            console.log('์„ธ ๋ฒˆ์งธ ์ž‘์—…', result);
        });

        console.log('๋‘ ๋ฒˆ์งธ ์ž‘์—…', result);
    });
});

// ์ถœ๋ ฅ ๊ฒฐ๊ณผ
/*
์ฒซ ๋ฒˆ์งธ ์ž‘์—… 2022-08-18T06:16:53.301Z
๋‘ ๋ฒˆ์งธ ์ž‘์—… 2022-08-18T06:16:54.322Z
์„ธ ๋ฒˆ์งธ ์ž‘์—… 2022-08-18T06:16:55.326Z
*/

 

- ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ๋Š” ์œ„์˜ ์˜ˆ์ œ์™€ ๋˜‘๊ฐ™์Œ.

๋‹จ์  : ๋™๊ธฐ์  ์ฒ˜๋ฆฌ๋กœ ๋ฐ”๊พธ๋ฉด์„œ ํ•œ ๋ˆˆ์— ํŒŒ์•…ํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค์–ด์ง.

โžก ์ด๊ฒƒ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด Promise ์‚ฌ์šฉ!

 

 

2. Promise๋ฅผ ์‚ฌ์šฉํ•œ ๋™๊ธฐ์  ์ฒ˜๋ฆฌ

- '์ฝœ๋ฐฑ ์ง€์˜ฅ'์„ ํƒˆ์ถœํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ API

1) Promise์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜
2) then์—์„œ ๋ฐ˜ํ™˜ํ•œ ๊ฒƒ์„ ๋ฐ›์Œ

 

/* sample 22 */
function workP(sec){
    return new Promise((resolve, reject) => {
        // Promise ์ƒ์„ฑ์‹œ ๋„˜๊ธฐ๋Š” callback = resolve, reject
        // resolve ๋™์ž‘ ์™„๋ฃŒ์‹œ ํ˜ธ์ถœ, ์˜ค๋ฅ˜ ๋‚ฌ์„ ๊ฒฝ์šฐ reject
        setTimeout(() => {
            resolve(new Date().toISOString());
        }, sec * 1000);
    });
}

workP(1).then((result)=>{
    console.log('์ฒซ๋ฒˆ์งธ ์ž‘์—…', result);
    return workP(1);
}).then((result)=>{
    console.log('๋‘๋ฒˆ์งธ ์ž‘์—…', result);
});

// ์ถœ๋ ฅ๊ฒฐ๊ณผ
/*
์ฒซ๋ฒˆ์งธ ์ž‘์—… 2022-08-18T06:21:16.005Z
๋‘๋ฒˆ์งธ ์ž‘์—… 2022-08-18T06:21:17.021Z
*/

 

1) workP() ๋ผ๋Š” ํ•จ์ˆ˜๋Š” new ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด Promise์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜

2) Promise๋ฅผ ์ƒ์„ฑํ•  ๋•Œ resolve์™€ reject๋ฅผ ๋„˜๊น€

3) workP()๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋ฐ˜ํ™˜๋˜๋Š” Promise์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ›์•„ resolve๋ฅผ ํ†ตํ•ด ๋ฐ›์€ ๊ฒฐ๊ณผ ๊ฐ’์„ ์‚ฌ์šฉํ•จ.

4) then()์€ Chainingd์„ ํ•˜์—ฌ ์‚ฌ์šฉํ•จ

- ์ฒซ ๋ฒˆ์งธ then()์—์„œ, ๋‘ ๋ฒˆ์งธ then()์ด ๋ฐ›๊ณ  ์‹ถ์€ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฐ˜ํ™˜

- ๋‘ ๋ฒˆ์งธ then()์—์„œ, ์„ธ ๋ฒˆ์งธ then()์ด ๋ฐ›๊ณ  ์‹ถ์€ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฐ˜ํ™˜

...

โžก ๋ฐ˜๋“œ์‹œ then()์ด ๋๋‚˜๊ณ  ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ์–ด์•ผ ๋‹ค์Œ then()์—์„œ ์ด๋ฅผ ๋ฐ›์•„ ๋ฌด์–ธ๊ฐ€๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ.

1. ์ธ์Šคํ„ด์Šค - ์ฝ”๋“œ์— ๊ตฌํ˜„๋œ ๊ฐ์ฒด๊ฐ€ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ๊ฒƒ
2. resolve - ์„ฑ๊ณตํ•  ๊ฒฝ์šฐ ํ˜ธ์ถœ (callback ํ•จ์ˆ˜์™€ ๋น„์Šทํ•จ)
3. reject - ์‹คํŒจํ•  ๊ฒฝ์šฐ ํ˜ธ์ถœ

โœ… async / await

 

1. async  / await์ด๋ž€?

Promise์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•ด์ฃผ๋Š” ํŒจํ„ด

(๋น„๋™๊ธฐ ์ฝ”๋“œ์˜ ๊ฒ‰๋ชจ์Šต๊ณผ ๋™์ž‘์„ ์ข€ ๋” ๋™๊ธฐ์ฝ”๋“œ์™€ ์œ ์‚ฌํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์คŒ)

 

1) Promise๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ

const makeRequest = () =>{
    getJSON()
    .then(data => {
        console.log(data);
        return 'done';
    });
}
makeRequest();

 

2) async / await์„ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ

// ex - awync/await
const makeRequest = async() => {
    console.log(await getJSON());
    return 'done';
}
makeRequest();

 

2. async / await์˜ ์žฅ์ 

1) new Promise๋กœ Promise ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•˜๊ณ  resolve, reject๋ฅผ ๋„˜๊ฒจ์ฃผ๋Š” ๋ถ€๋ถ„์„ ์ˆจ๊น€

2) try / catch๋ฅผ ํ†ตํ•œ ์˜ค๋ฅ˜๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Œ

3) ์ค‘์ฒฉ ํ˜„์ƒ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ

/* sample 23 */
function workP(sec){
    return new Promise((resolve, reject)=>{
        setTimeout(()=>{
            resolve(new Date().toISOString());
        }, sec * 1000);
    });
}

function justFunc(){
    return 'just Function';
}

async function asyncFunc(){
    return 'async Function';
}

console.log(
    justFunc(),
    asyncFunc(),
    workP()
    );

// ์ถœ๋ ฅ๊ฒฐ๊ณผ
// just Function Promise { 'async Function' } Promise { <pending> }

 

 

3. async / await์˜ ์‚ฌ์šฉ๋ฒ•

 

1) async๋Š” Promise ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•จ.

โžก Promise๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— Promise ํŒจํ„ด์—์„œ์ฒ˜๋Ÿผ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ then()์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

 

2) await์˜ ์‚ฌ์šฉ๋ฒ•

: async ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ธ ํ•จ์ˆ˜ ์•ˆ์— lock์„ ๊ฑธ์–ด ๋†“๊ณ  ์‹ถ์€ ๋ถ€๋ถ„์— await๋ฅผ ๋ถ™์ด๋ฉด ๋จ.

 

/* sample 24 */
function workP(sec){
    return new Promise((resolve, reject)=>{
        setTimeout(()=>{
            resolve('workP function');
        }, sec * 1000);
    });
}

async function asyncFunc(){
    const result_workP = await workP(3);
    console.log(result_workP);
    return 'async function';
}

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

// ์ถœ๋ ฅ ๊ฒฐ๊ณผ
/*
workP function
async function
*/

workP() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ถ€๋ถ„์— await์„ ๋ถ™์ž„

โžก ์›๋ž˜ workP ํ•จ์ˆ˜๋Š” setTimeout() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋จ.

โžก ๊ทธ๋Ÿฌ๋‚˜ await๋ฅผ ๋ถ™์˜€๊ธฐ ๋•Œ๋ฌธ์— workP(3) ํ•จ์ˆ˜๊ฐ€ ์™„๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€ ๊ทธ ๋ฐ‘์˜ ๊ตฌ๋ฌธ์€ ์‹คํ–‰ํ•˜์ง€ ์•Š์Œ.