μ½λ°±(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 {
// μ€ν¬λ¦½νΈ λ‘λ©μ΄ μ±κ³΅μ μΌλ‘ λλ¨
}
});
μ€λ₯ μ°μ μ½λ°±μ κ΄λ‘
callback
μ 첫 λ²μ§Έ μΈμλ μλ¬λ₯Ό μν΄ λ¨κ²¨λλ€. μλ¬κ° λ°μνλ©΄ μ΄ μΈμλ₯Ό μ΄μ©ν΄callback(err)
μ΄ νΈμΆλλ€.- λ λ²μ§Έ μΈμλ μλ¬κ° λ°μνμ§ μμμ λλ₯Ό μν΄ λ¨κ²¨λλ€. μνλ λμμ΄ μ±κ³΅ν κ²½μ°μ
callback(null, result1, result2)
κ° νΈμΆλλ€.
μ€λ₯ μ°μ μ½λ°±μ μ₯μ
μ€λ₯ μ°μ μ½λ°±μ μ¬μ©νλ©΄, λ¨μΌ μ½λ°± ν¨μμμ μλ¬ μΌμ΄μ€μ μ±κ³΅ μΌμ΄μ€ λͺ¨λλ₯Ό μ²λ¦¬ν μ μλ€.
μΆμ²
- μ½μ΄ μλ°μ€ν¬λ¦½νΈ
- λͺ¨λ μλ°μ€ν¬λ¦½νΈ νν 리μΌ
π¬ μ΅μ λκΈ