[๐Ÿ’ป ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE 44๊ธฐ] Promise, ๋ชจ๋“ˆ

JiEunยท2023๋…„ 3์›” 20์ผ
0
post-thumbnail

โœ”๏ธ ์‹œ์ž‘

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ๋น„๋™๊ธฐ์— ์‚ฌ์šฉํ•˜๋Š” promise์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค.
์ ์  ์ด๋ก ์ด ๊นŠ์–ด์ ธ ๊ฐ„๋‹ค..


๐Ÿ“๋ฐฐ์šด ๊ฒƒ

โœ”๏ธ Promise

  • ๊ฐ’์ด ๋ฐ˜ํ™˜๋œ ๊ฒฝ์šฐ ๋น„๋™๊ธฐ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.
  • ๋ฆฌํ„ด๋œ ๊ฒฝ์šฐ .then, .catch ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • callback ๋ฐฉ์‹์˜ ํ•œ๊ณ„๊ฐ€ ์žˆ์–ด ์ƒ๊ธฐ๊ฒŒ ๋˜์—ˆ๋‹ค.

.then

  • ๊ฒฐ๊ณผ๊ฐ€ ์„ฑ๊ณตํ–ˆ์„ ๋•Œ then์œผ๋กœ ์ „๋‹ฌ๋œ ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.

    ์ฝœ๋ฐฑ ํ•จ์ˆ˜์— ๊ฒฐ๊ณผ ๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ ์ฒซ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ˜์„ ์ˆ˜ ์žˆ๋‹ค.

.catch

  • ๊ฒฐ๊ณผ๊ฐ€ ์‹คํŒจํ–ˆ์„ ๋•Œ catch๋กœ ์ „๋‹ฌ๋œ ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

    ์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋˜๊ณ  ๊ทธ ์ดํ›„๋ฅผ ์•Œ๋ ค์ค€๋‹ค.

fech('...');
.then(function(response ๊ฐ์ฒด){
	//์„ฑ๊ณต ์ฝ”๋“œ
})
.catch(function(response ๊ฐ์ฒด){
	//์‹คํŒจ ์ฝ”๋“œ
})

promise chaning

  • promise๋กœ ๋ฆฌํ„ด๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ดํ›„ ์ž‘์„ฑ๋˜๋Š” ์ฝ”๋“œ์— ์„ ์–ธํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

โœ”๏ธ Promise ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • ๋น„๋™๊ธฐ์ ์ธ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ๊ฒฝ์šฐ ๊ทธ ์ž‘์—…์ด ์„ฑ๊ณต/์‹คํŒจ ํ–ˆ๋Š”์ง€ ํ‘œ์ค€ํ™”๋œ ๋ฐฉ์‹์„ ์ด์šฉํ•ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

promise all()

  • ์—ฌ๋ ค๊ฐœ ๋น„๋™๊ธฐ ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ธ์ž๋กœ ๋ฐฐ์—ด์„ ๋ฐ›๋Š”๋‹ค.
  • ์ •์ƒ ์ฒ˜๋ฆฌ๋œ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์—ด์— ์ €์žฅํ•ด ์ƒˆ๋กœ์šด promise๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์—๋Ÿฌ๋‚œ ๊ฒฝ์šฐ ๋‚˜๋จธ์ง€ promise์˜ state์™€ ์ƒ๊ด€์—†์ด ์ฆ‰์‹œ ์ข…๋ฃŒํ•œ๋‹ค.
const promiseAll = Promise.all([promise1, promise2, ...])
promiseAll.then((result) => {
  console.log(resulte)
})

promise โžค (then) โžค response.joson() โžค (then) โžค Result
response.json() โžค promise๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.(์ด๋ฏธ JSON ํ…์ŠคํŠธ ํŒŒ์ผ์„)

promise Hell

  • callback ํ•จ์ˆ˜์™€ ๊ฐ™์ด ๊ธธ์–ด์งˆ ๊ฒฝ์šฐ ๊ฐ€๋…์„ฑ์ด ๋‚ฎ์•„์ง€๊ณ  promise Hell์ด ๋ฐœ์ƒํ•˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

โœ”๏ธ Async / Await

  • promise ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • ํ•จ์ˆ˜ ์•ž์— async ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ,
    async ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ await ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • await ํ‚ค์›Œ๋“œ๊ฐ€ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰ ํ›„ ๋‹ค์Œ ์ˆœ์„œ์˜ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
  • asyncํ•จ์ˆ˜๋Š”promise๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
//์„ ์–ธ์‹
async function func(){
	await ์‹คํ–‰ ์ฝ”๋“œ
}

//ํ‘œํ˜„์‹
const func = async function(){
	await ์‹คํ–‰ ์ฝ”๋“œ
}

//ํ™”์‚ดํ‘œ ํ•จ์ˆ˜
const func = asyn() => {
	await ์‹คํ–‰ ์ฝ”๋“œ
}

await๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์กด์žฌ ํ•ด์•ผํ•˜๋ฉฐ async๊ฐ€ ํ•จ์ˆ˜ ์•ž์— ์ž‘์„ฑ ๋ผ์•ผํ•œ๋‹ค.

  • async ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ ํ•ด๋‹น ํ•จ์ˆ˜ ๋’ค์— .then()์„ ๋ถ™์—ฌ์ค€๋‹ค.
func().then();

โœ”๏ธ ๋ชจ๋“ˆ(module)

  • ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์กฐ๋ฆฝํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋งŒ๋“  ๋ถ€๋ถ„

fs(File System) : PC์˜ ํŒŒ์ผ์„ ์ฝ๊ฑฐ๋‚˜ ์ €์žฅํ•˜๋Š” ์ผ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค.
readFile : ํŒŒ์ผ ์ฝ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ
writeFile : ํŒŒ์ผ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ
require : Node.js์—์„œ ๋‹ค๋ฅธ ํŒŒ์ผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ตฌ๋ฌธ

const fs = require('fs'); // ํŒŒ์ผ ์‹œ์Šคํ…œ ๋ชจ๋“ˆ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
const dns = require('dns'); // DNS ๋ชจ๋“ˆ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

โœ”๏ธ ์„œ๋“œ ํŒŒ์ผ ๋ชจ๋“ˆ(3rd-party-module)

  • ํ•ด๋‹น ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๊ณต์‹์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋นŒํŠธ์ธ ๋ชจ๋“ˆ(built-in module)์ด ์•„๋‹Œ, ๋ชจ๋“  ์™ธ๋ถ€ ๋ชจ๋“ˆ์„ ์ผ์ปซ๋Š”๋‹ค.

    Node.js์—์„œ 'underscore'์€ Node.js ๊ณต์‹๋ฌธ์„œ์—๋Š” ์—†๋Š” ๋ชจ๋“ˆ๋กœ ์„œ๋ธŒ ํŒŒํ‹ฐ ๋ชจ๋“ˆ์ด๋‹ค.

  • ๋ชจ๋“ˆ ๋‹ค์šด๋กœ๋“œ๋ฅผ ์œ„ํ•ด npm์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • npm install : ๋ชจ๋“ˆ ์„ค์น˜

fs.readFile(path, [options], callback)

  • ๋น„๋™๊ธฐ์ ์œผ๋กœ ํŒŒ์ผ ๋‚ด์šฉ ์ „์ฒด๋ฅผ ์ฝ๋Š”๋‹ค.
  • ์ „๋‹ฌ์ธ์ž 3๊ฐœ๋ฅผ ๋ฐ˜๋Š”๋‹ค.

path\<String>,\<Buffer>,\<URL>,\<integer>

  • path์—๋Š” ํŒŒ์ผ ์ด๋ฆ„์„ ์ „๋‹ฌ์ธ์ž๋กœ ๋ฐ›๋Š”๋‹ค.
  • 4๊ฐ€์ง€ ํƒ€์ž…์„ ๋„˜๊ธธ ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ <string> ํƒ€์ž…์„ ๋ฐ›๋Š”๋‹ค.

options\<Object>\<String>

  • ๋Œ€๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ์ง„ ๋‘๋ฒˆ์งธ ์ „๋‹ฌ์ธ์ž options๋Š” ๋„ฃ์„ ์ˆ˜๋„, ๋„ฃ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.
  • ๋ฌธ์ž์—ด ๋˜๋Š” ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๋ฐ›๋Š”๋‹ค.
  • ๋ฌธ์ž์—ด๋กœ ์ „๋‹ฌํ•  ๊ฒฝ์šฐ ์ธ์ฝ”๋”ฉ์„ ๋ฐ›๋Š”๋‹ค.(utf8)
// ./etc/file ํŒŒ์ผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
fs.readFile('./etc/file','','');

//utf8์„ ์ด์šฉํ•ด ์ฝ๋Š”๋‹ค.
fs.readFile('./etc/file', 'utf8', ...)

//etc ํŒŒ์ผ options์ด์šฉํ•ด ์ฝ๊ธฐ
let options = { encoding : 'utf8', flag : 'r' };

callbak\<function>

  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ, ํŒŒ์ผ ์ฝ์€ ํ›„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜
  • err\<Error>\<AggregateError>
    : ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉด err๋Š” null์ด๋œ๋‹ค.
  • data\<String>\<Buffer>
    : ๋ฌธ์ž์—ด์ด๋‚˜ Buffer๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ ์ „๋‹ฌ ๋œ๋‹ค.(data๋Š” ํŒŒ์ผ์˜ ๋‚ด์šฉ)
fs.readFile('test.txt', 'utf8', (err, data) => {
	if(err){
    	thow err;
    }
  	console.log(data);
})

โœ๏ธ ๋งˆ์น˜๋ฉฐ

promise๋ฅผ ์ด์šฉํ•ด ์ฝœ๋ฐฑ ์ง€์˜ฅ์— ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ์œผ๋ฉฐ
then, catch ๋Œ€์‹  Async, Awit๋ฅผ ์‚ฌ์šฉํ•ด ๊ธ€์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฒˆ ๊ณผ์ œ๋ฅผ ๊ฝค ์–ด๋ ค์› ๋‹ค. ๋‹คํ–‰ํžˆ ๋‹ค์Œ๋‚  ๊นŒ์ง€ ์ง„ํ–‰ํ•˜๋Š” ๊ฑฐ๋ผ ๋‹คํ–‰์ด์˜€๋‹ค.

์ปค๋ฆฌํ˜๋Ÿผ ๋งˆ์ง€๋ง‰ ์‹œ๊ฐ„์—๋Š” ์ „์ง€์  ์„ ๋ฐฐ ์ฐธ๊ฒฌ ์‹œ์ ์œผ๋กœ
์—ฌ๋Ÿฌ ์–˜๊ธฐ๋ฅผ ํ•˜๋ฉด์„œ ๋‚˜์˜ ๋ฐฉํ–ฅ์„ฑ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋˜ ๋œป ๊นŠ์€ ์‹œ๊ฐ„์ด์˜€๋‹ค.

profile
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ฑ์žฅ ์ค‘! (์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ ๋“ฑ์„ ์ •๋ฆฌํ•˜๊ธฐ)

0๊ฐœ์˜ ๋Œ“๊ธ€