Asynchronous Processing

์บกํ‹ดํŒ๊ต๋‹˜์˜ ํฌ์ŠคํŒ…์„ ์ฝ๊ณ  ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค

JavaScript์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ

๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ž€? ์–ด๋–ค ์ฝ”๋“œ์˜ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€์•Š๊ณ  ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์‹คํ–‰ํ•˜๋Š” ํŠน์„ฑ

Example

  1. jQuery ajax

  2. setTimeout() - Web API์˜ ํ•œ ์ข…๋ฅ˜๋กœ ์ง€์ •ํ•œ ์‹œ๊ฐ„๋งŒํผ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์‹คํ–‰

  • ๋ฌธ์ œ์  -> ์ฝ”๋“œ ์ž‘์„ฑ์€ 1-2-3 ์ด์–ด๋„ ์‹ค์ œ ์‹คํ–‰์€ 1-3-2

Callbackํ•จ์ˆ˜๋กœ ๋ฌธ์ œ์  ํ•ด๊ฒฐ

์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ๋กœ์ง์ด ๋๋‚ฌ์„ ๋•Œ์—๋งŒ ์›ํ•˜๋Š” ๋™์ž‘์„ ์‹คํ–‰

Callback hell ์ฝœ๋ฐฑ ์ง€์˜ฅ

์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์—ฐ์†ํ•ด์„œ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ

  • ํ•ด๊ฒฐ๋ฐฉ๋ฒ• -> ์ฝ”๋”ฉ ํŒจํ„ด์œผ๋กœ ๊ฐœ์„  or Promise, Async ์‚ฌ์šฉ

Promise

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

Promise - MDN

Promise์˜ ์„ธ๊ฐ€์ง€ ์ƒํƒœ

  • Pending(๋Œ€๊ธฐ) : ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋กœ์ง์ด ์•„์ง ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ์ƒํƒœ new Promise()

  • Fulfilled(์ดํ–‰) : ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜์–ด ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์ค€ ์ƒํƒœ resolve(), then()

  • Rejected(์‹คํŒจ) : ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ์ƒํƒœ reject() ์‹คํŒจํ•œ ์ด์œ ๋ฅผ catch()๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ

Promise Chaining

  • then() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋‚˜๋ฉด ์ƒˆ๋กœ์šด ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด๊ฐ€ ๋ฐ˜ํ™˜๋˜๊ณ  ์ด๋ฅผ ์ด์šฉํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ๋ฏธ์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

Promise Error Handling(reject()๊ฐ€ ํ˜ธ์ถœ๋œ ์‹คํŒจ ์ƒํƒœ)

  1. then()์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌ

  2. catch() ์ด์šฉํ•˜๊ธฐ

  • 1๋ฒˆ์˜ ๊ฒฝ์šฐ then()์˜ ์ฒซ ๋ฒˆ์งธ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ์˜ ์˜ค๋ฅ˜๋ฅผ ์ œ๋Œ€๋กœ ์žก์•„๋‚ด์ง€ ๋ชปํ•จ ๋”ฐ๋ผ์„œ ๋” ๋งŽ์€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ƒํ™ฉ์„ ์œ„ํ•ด ๊ฐ€๊ธ‰์  2๋ฒˆcatch()์‚ฌ์šฉ

async & await

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํŒจํ„ด ์ค‘ ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋‚˜์˜จ ํŒจํ„ด์œผ๋กœ ๊ธฐ์กด์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ธ callback๊ณผ promise์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ๊ธฐ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ

  • async & await example

async function logName() {
    var user = await fetchUser('domain.com/users/1');
    if (user.id === 1) {
        console.log(user.name);
    }
}
  • callback func example

function logName() {
    var user = fetchUser('domain.com/users/1', function(user) {
        if (user.id === 1) {
            console.log(user.name);
        }
    });
}

async & await ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

async function ํ•จ์ˆ˜๋ช…() {
    await ๋น„๋™๊ธฐ_์ฒ˜๋ฆฌ_๋ฉ”์„œ๋“œ_๋ช…();
}
  1. ํ•จ์ˆ˜ ์•ž์— async๋ผ๋Š” ์˜ˆ์•ฝ์–ด๋ฅผ ๋ถ™์ž„

  2. ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€ ๋กœ์ง ์ค‘ HTTPํ†ต์‹ ์„ ํ•˜๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ฝ”๋“œ ์•ž์— await๋ฅผ ๋ถ™์ž„

    • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ๊ฐ€ ๊ผญ ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ await๊ฐ€ ์˜๋„ํ•œ๋Œ€๋กœ ๋™์ž‘ํ•จ

  3. await์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋Š” axios ๋“ฑ ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” API ํ˜ธ์ถœ ํ•จ์ˆ˜

async & await ์žฅ์ 

  • callback์ด๋‚˜ promise๋ณด๋‹ค ์งง์€ ์ฝ”๋“œ์™€ ๊ฐ€๋…์„ฑ

  • ๊ธฐ์กด์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ฝ”๋“œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ๊ณ ํ•˜์ง€ ์•Š์•„๋„ ๋จ

async & await ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

try catch ๋ฌธ๋ฒ• ์‚ฌ์šฉ

Last updated