[Javascript] callback, promise, async/await

sunnyยท2022๋…„ 10์›” 10์ผ

callback ์ดํ•ดํ•˜๊ธฐ!


๐Ÿ‘‰ func์€ ๋ฐ”๋กœ ์‹คํ–‰๋˜์ง„ ์•Š์ง€๋งŒ ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ž…๋ ฅ๊ฐ’์œผ๋กœ ์ „๋‹ฌ๋˜์„œ ๋‹ค๋ฅธ ํ•จ์ˆ˜์— ์˜ํ•ด์„œ ๋‚˜์ค‘์— ํ˜ธ์ถœ๋œ๋‹ค!!

callback ํ•จ์ˆ˜ ์˜ˆ์ œ

๊ธฐ๋ณธ

words = ['apple', 'banana', 'grape'];
function callback(element){
  return element.length > 6;
}
newWords = wrods.filter(callback);

์ต๋ช… ํ•จ์ˆ˜

words = ['apple', 'banana', 'grape'];

newWords = wrods.filter(function(element){
  return element.length > 6;
});

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

words = ['apple', 'banana', 'grape'];

newWords = wrods.filter((element) => {
  return element.length > 6;
});

newWords = wrods.filter(element => element.length > 6);

callback ํ•จ์ˆ˜ ์˜ˆ์ œ2

words = ['apple', 'banana', 'grape'];
function myfilter(origin, callback) {
  var result = [];
  for(var i = 0; i < origin.length; i++){
  	var current = origin[i];
    if(callback(current)){
    	result.push(current);
    }
  }
}
newWords = myfilter(words, element => element.length > 6);

Promise ์ดํ•ดํ•˜๊ธฐ!

promise ๐Ÿ‘‰ ์‹คํ–‰์€ ๋ฐ”๋กœ ํ•˜๋˜, ๊ฒฐ๊ณผ๊ฐ’์€ ๋‚˜์ค‘์— ๋ฐ›๋Š” ๊ฐ์ฒด

  • ๊ฒฐ๊ณผ๊ฐ’์€ ์‹คํ–‰์ด ์™„๋ฃŒ๋œ ํ›„ then์ด๋‚˜ catch ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ›๋Š”๋‹ค
  • new Promise๋Š” ๋ฐ”๋กœ ์‹คํ–‰๋˜์ง€๋งŒ, ๊ฒฐ๊ณผ๊ฐ’์€ then์„ ๋ถ™์˜€์„ ๋•Œ ๋ฐ›๊ฒŒ ๋œ๋‹ค.
  • ์ฝœ๋ฐฑ ์ง€์˜ฅ ํ•ด๊ฒฐ

์–ธ์ œ ๋น„๋™๊ธฐ์  ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋А๋ƒ?

  • ์ด๋ฒคํŠธ ๋ฆฌ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ์ž์ฃผ ์‚ฌ์šฉ
  • ์–ธ์ œ ๋๋‚  ์ง€ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์šธ ๋•Œ
  • ์ฃผ๊ฐ€ ๋˜๋Š” ์ž‘์—…์ด ์•„๋‹ ๋•Œ
  • ๋Œ€ํ‘œ์ ์œผ๋กœ, ํ†ต์‹ ํ•  ๋•Œ

promise ์˜ˆ์ œ

๊ธฐ๋ณธ ์˜ˆ์ œ

const condition = true; // true๋ฉด resolve, false๋ฉด reject

const promise = new Promise((resolve, reject) => {
    if (condition) {
        resolve('์„ฑ๊ณต');
    } else {
        reject('์‹คํŒจ');
    }
});
// ๋‹ค๋ฅธ ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ
promise
    .then((message) => {
        console.log(message); // ์„ฑ๊ณต(resolve)ํ•œ ๊ฒฝ์šฐ ์‹คํ–‰
    })
    .catch((error) => {
        console.error(error); // ์‹คํŒจ(reject)ํ•œ ๊ฒฝ์šฐ ์‹คํ–‰
    })
    .finally(() => { // ๋๋‚˜๊ณ  ๋ฌด์กฐ๊ฑด ์‹คํ–‰
        console.log('๋ฌด์กฐ๊ฑด ์‹คํ–‰');
    });

promise chaining

const condition = false; // true๋ฉด resolve, false๋ฉด reject

const promise = new Promise((resolve, reject) => {
    if (condition) {
        resolve('์„ฑ๊ณต');
    } else {
        reject('์‹คํŒจ');
    }
});
// ๋‹ค๋ฅธ ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ
promise
    .then((message) => {
        return new Promise((resolve, reject) => {
            resolve(message);
        });
    })
    .then((message2) => {
        console.log(message2);
        return new Promise((resolve, reject) => {
            resolve(message2);
        });
    })
    .then((message3) => {
        console.log(message3);
    })
    .catch((error) => {
        console.error(error); // ์‹คํŒจ(reject)ํ•œ ๊ฒฝ์šฐ ์‹คํ–‰
    })

์˜ˆ์ œ

function findAndSaverUser(Users) {
    Users.findOne({})
        .then((user) => {
            user.name = 'zero';
            return user.save();
        })
        .then((user) => {
            return Users.findOne({ gender: 'm' });
        })
        .then((user) => {
            // ์ƒ๋žต
        })
        .catch(err => {
            console.error(err);
        });
}

async/await ์ดํ•ดํ•˜๊ธฐ!

ํ•จ์ˆ˜ ์„ ์–ธ๋ถ€๋ฅผ ์ผ๋ฐ˜ ํ•จ์ˆ˜ ๋Œ€์‹  async function์œผ๋กœ ๊ต์ฒดํ•œ ํ›„, ํ”„๋กœ๋ฏธ์Šค ์•ž์— await์„ ๋ถ™์ธ๋‹ค.

  • async ๋Š” ์•”๋ฌต์ ์œผ๋กœ promise๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • await ๋Š” resolve, reject์™€ ๊ฐ™์€ promise ๊ฐ์ฒด๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

async ์˜ˆ์ œ

promise ์ฝ”๋“œ

function findAndSaverUser(Users) {
    Users.findOne({})
        .then((user) => {
            user.name = 'zero';
            return user.save();
        })
        .then((user) => {
            return Users.findOne({ gender: 'm' });
        })
        .then((user) => {
            // ์ƒ๋žต
        })
        .catch(err => {
            console.error(err);
        });
}

async/await ์ฝ”๋“œ

async function findAndSaverUser(Users) {
    try{
        let user = await Users.findOne({});
        user.name = 'zero';
        user = await user.save();
        user = await Users.findOne({ gender: 'm' });
        // ์ƒ๋žต
    } catch (error) {
        console.error(error);
    }
}

ํ•จ์ˆ˜๋Š” ํ•ด๋‹น ํ”„๋กœ๋ฏธ์Šค๊ฐ€ resolve๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ๋’ค ๋‹ค์Œ ๋กœ์ง์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.


โ—์ถœ์ฒ˜ : ์œ ํŠœ๋ธŒ ์ƒํ™œ์ฝ”๋”ฉ, Node.js ๊ต๊ณผ์„œ

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