콜백(Callback)

πŸ“„ 콜백

콜백 ν•¨μˆ˜λŠ” λ‹€λ₯Έ μ½”λ“œλ₯Ό 인자둜 λ„˜κ²¨μ£ΌλŠ” ν•¨μˆ˜μ΄λ‹€.
λ‹€λ₯Έ μ½”λ“œ(ν•¨μˆ˜ λ˜λŠ” λ©”μ„œλ“œ)μ—κ²Œ 인자둜 λ„˜κ²¨μ€ŒμœΌλ‘œμ¨ κ·Έ μ œμ–΄κΆŒλ„ ν•¨κ»˜ μœ„μž„ν•œλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 호슀트 ν™˜κ²½μ΄ μ œκ³΅ν•˜λŠ” μ—¬λŸ¬ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ 비동기 λ™μž‘μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€.

πŸ“„ μ½œλ°±μ€ μ–΄λ–€ κ²½μš°μ— μ‚¬μš©λ κΉŒ?

function loadScript(src) {
  // <script> νƒœκ·Έλ₯Ό λ§Œλ“€κ³  νŽ˜μ΄μ§€μ— νƒœκ·Έλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
  // νƒœκ·Έκ°€ νŽ˜μ΄μ§€μ— μΆ”κ°€λ˜λ©΄ src에 μžˆλŠ” 슀크립트λ₯Ό λ‘œλ”©ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€.
  let script = document.createElement("script");
  script.src = src;
  document.head.append(script);
}

loadScript("/my/script.js"); // script.jsμ—” "function newFunction() {…}"이 μžˆμŠ΅λ‹ˆλ‹€.

newFunction(); // ν•¨μˆ˜κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€!

new Function()μ—μ„œ μ—λŸ¬κ°€ λ°œμƒν•˜λŠ” μ΄μœ λŠ” λΈŒλΌμš°μ €κ°€ 슀크립트λ₯Ό μ½μ–΄μ˜¬ 수 μžˆλŠ” μ‹œκ°„μ„ μΆ©λΆ„νžˆ ν™•λ³΄ν•˜μ§€ λͺ»ν–ˆκΈ° λ•Œλ¬Έμ΄λ‹€.

function loadScript(src, callback) {
  let script = document.createElement('script');
  script.src = src;

  script.onload = () => callback(script);

  document.head.append(script);
}

loadScript('/my/script.js', function() {
  // 콜백 ν•¨μˆ˜λŠ” 슀크립트 λ‘œλ“œκ°€ λλ‚˜λ©΄ μ‹€ν–‰λ©λ‹ˆλ‹€.
  newFunction(); // 이제 ν•¨μˆ˜ 호좜이 μ œλŒ€λ‘œ λ™μž‘ν•©λ‹ˆλ‹€.
  ...
});

loadScript의 두 번째 μΈμˆ˜μ— 슀크립트 λ‘œλ”©μ΄ λλ‚œ ν›„ 싀행될 ν•¨μˆ˜μΈ 콜백 ν•¨μˆ˜λ₯Ό μΆ”κ°€ν–ˆλ‹€.
두 번째 인수둜 μ „λ‹¬λ˜ ν•¨μˆ˜λŠ” μ›ν•˜λŠ” λ™μž‘μ΄ μ™„λ£Œλ˜μ—ˆμ„ λ–„ μ‹€ν–‰λœλ‹€.

이것을 콜백 기반 비동기 ν”„λ‘œκ·Έλž˜λ°μ΄λΌκ³  λΆ€λ₯Έλ‹€.
λΉ„λ™κΈ°μ μœΌλ‘œ μˆ˜ν–‰λ˜μ–΄μ•Όν•  ν•„μš”μ„±μ„ κ°€μ§„ μ½”λ“œμ— μ½œλ°±μ„ 기반으둜 μ ‘κ·Όν•  수 μžˆλ‹€.

πŸ“„ 였λ₯˜ μš°μ„  콜백

μ½œλ°±ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄μ„œ μ—λŸ¬λ₯Ό 핸듀링할 수 μžˆλ‹€.

function loadScript(src, callback) {
  let script = document.createElement("script");
  script.src = src;

  script.onload = () => callback(null, script);
  script.onerror = () =>
    callback(new Error(`${src}λ₯Ό λΆˆλŸ¬μ˜€λŠ” 도쀑에 μ—λŸ¬κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.`));

  document.head.append(script);
}

loadScript("/my/script.js", function (error, script) {
  if (error) {
    // μ—λŸ¬ 처리
  } else {
    // 슀크립트 λ‘œλ”©μ΄ μ„±κ³΅μ μœΌλ‘œ 끝남
  }
});

였λ₯˜ μš°μ„  콜백의 κ΄€λ‘€

  1. callback의 첫 번째 μΈμˆ˜λŠ” μ—λŸ¬λ₯Ό μœ„ν•΄ 남겨둔닀. μ—λŸ¬κ°€ λ°œμƒν•˜λ©΄ 이 인수λ₯Ό μ΄μš©ν•΄ callback(err)이 ν˜ΈμΆœλœλ‹€.
  2. 두 번째 μΈμˆ˜λŠ” μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•Šμ•˜μ„ λ•Œλ₯Ό μœ„ν•΄ 남겨둔닀. μ›ν•˜λŠ” λ™μž‘μ΄ μ„±κ³΅ν•œ κ²½μš°μ—” callback(null, result1, result2)κ°€ ν˜ΈμΆœλœλ‹€.

였λ₯˜ μš°μ„  콜백의 μž₯점

였λ₯˜ μš°μ„  μ½œλ°±μ„ μ‚¬μš©ν•˜λ©΄, 단일 콜백 ν•¨μˆ˜μ—μ„œ μ—λŸ¬ μΌ€μ΄μŠ€μ™€ 성곡 μΌ€μ΄μŠ€ λͺ¨λ‘λ₯Ό μ²˜λ¦¬ν•  수 μžˆλ‹€.

좜처

Leave a comment