μ λλ μ΄ν°μ async/await
μ λλ μ΄ν°λ?
- ES6μμ λμ λ μ λλ μ΄ν°λ μ½λ λΈλ‘μ μ€νμ μΌμ μ€μ§ νλ€κ° νμν μμ μ μ¬κ°ν μ μλ νΉμν ν¨μ μ λλ€.
- μΌλ° ν¨μμμ μ°¨μ΄
μ λλ μ΄ν° ν¨μλ ν¨μ νΈμΆμμκ² ν¨μ μ€νμ μ μ΄κΆμ μλν μ μλ€.
- μ΄λ ν¨μμ μ μ΄κΆμ νΈμΆμμκ² λκΈ°λ κ²μ μλ(
yield
)λΌκ³ ν¨
- μ΄λ ν¨μμ μ μ΄κΆμ νΈμΆμμκ² λκΈ°λ κ²μ μλ(
μ λλ μ΄ν° ν¨μλ ν¨μ νΈμΆμμ ν¨μμ μνλ₯Ό μ£Όκ³ λ°μ μ μλ€.
- μ λλ μ΄ν° ν¨μλ ν¨μ νΈμΆμμκ² μνλ₯Ό μ λ¬ν μ μκ³ ν¨μ νΈμΆμλ‘ λΆν° μνλ₯Ό μ λ¬ λ°μ μλ μλ€.
μ λλ μ΄ν° ν¨μλ₯Ό νΈμΆνλ©΄ μ λλ μ΄ν° κ°μ²΄λ₯Ό λ°ννλ€.
- μ λλ μ΄ν° ν¨μλ₯Ό νΈμΆνλ©΄ ν¨μ μ½λλ₯Ό μ€ννλ κ²μ΄ μλλΌ μ΄ν°λ¬λΈμ΄λ©΄μ λμμ μ΄ν°λ μ΄ν°μΈ μ λλ μ΄ν° κ°μ²΄λ₯Ό λ°ννλ€.
μ λλ μ΄ν° ν¨μμ μ μ
- μ λλ μ΄ν° ν¨μλ
function*
ν€μλλ‘ μ μ - νλ μ΄μμ
yield
ννμμ ν¬ν¨νλ€. - μ λλ μ΄ν° ν¨μλ νμ΄ν ν¨μλ‘ μ μν μ μλ€.
- μ λλ μ΄ν° ν¨μλ
new
μ°μ°μμ ν¨κ» μμ±μ ν¨μλ‘ νΈμΆν μ μλ€.
// μ λλ μ΄ν° ν¨μ μ μΈλ¬Έ
function* genDecFunc() {
yield 1;
}
// μ λλ μ΄ν° ν¨μ ννμ
const genExpFunc = function* () {
yield 1;
};
// μ λλ μ΄ν° λ©μλ
const obj = {
* genObjMethod() {
yield 1;
}
};
// μ λλ μ΄ν° ν΄λμ€ λ©μλ
class MyClass {
* genClsMethod() {
yield 1;
}
}
μ λλ μ΄ν° κ°μ²΄
- μ λλ μ΄ν° ν¨μλ₯Ό νΈμΆνλ©΄ μΌλ° ν¨μμ²λΌ ν¨μ μ½λ λΈλ‘μ μ€ννλ κ²μ΄ μλλΌ μ λλ μ΄ν° κ°μ²΄λ₯Ό μμ±ν΄ λ°ν
- μ λλ μ΄ν° κ°μ²΄λ μ΄ν°λ¬λΈ μ΄λ©΄μ λμμ μ΄ν°λ μ΄ν°
- μ΄ν°λ μ΄ν° μ΄λ―λ‘
next()
λ©μλλ₯Ό κ°μ§ - λ€λ₯Έ μ΄ν°λ μ΄ν°μ λ€λ₯΄κ²
return
,throw
λ©μλλ₯Ό κ°μ§λ€. - λ©μλ λμ λ°©μ
next
:yield
ννμ κΉμ§ μ½λ λΈλ‘μ μ€ννκ³yield
λ κ°μvalue
νλ‘νΌν° κ°μΌλ‘,false
κ°μ κ°λdone
νλ‘νΌν°λ₯Ό κ°μ§ 리μ νΈ κ°μ²΄λ₯Ό λ°νreturn
: μΈμλ‘ μ λ¬ λ°μ κ°μvalue
νλ‘νΌν° κ°μΌλ‘,done
νλ‘νΌν° κ°μ΄true
μΈ λ¦¬μ νΈ κ°μ²΄ λ°νthrow
: μΈμλ‘ μ λ¬ λ°μ μλ¬λ₯Ό λ°μμν€κ³undefined
κ°μvalue
νλ‘νΌν°μ κ°μΌλ‘,done
νλ‘νΌν°μ κ°μ΄ trueμΈ λ¦¬μ νΈ κ°μ²΄ λ°ν
function* genFunc() {
try {
yield 1;
yield 2;
yield 3;
} catch (e) {
console.error(e);
}
}
const generator = genFunc();
console.log(generator.next()); // {value: 1, done: false}
// return νμ λ
console.log(geneator.return('End!')); // {value: "End!", done: true}
// throw νμ λ
console.log(generator.throw('Error!')); // {value: undefined, done: true}
μ λλ μ΄ν°μ μΌμ μ€μ§μ μ¬κ°
- μ λλ μ΄ν° ν¨μλ μΌλ°ν¨μμ²λΌ μ½λ λΈλ‘μ μΌκ΄ μ€ννλ κ²μ΄ μλλΌ
yield
ννμ κΉμ§λ§ μ€ν yield
ν€μλλ μ λλ μ΄ν° ν¨μμ μ€νμ μΌμ μ€μ§ μν€κ±°λyield
ν€μλ λ€μ μ€λ ννμμ νκ° κ²°κ³Όλ₯Ό μ λλ μ΄ν° ν¨μ νΈμΆμμκ² λ°ν
function* genFunc(){
yield 1;
yield 2;
yield 3;
}
// μ λλ μ΄ν° ν¨μ μ€νμ μ λλ μ΄ν° κ°μ²΄λ₯Ό λ°νν©λλ€.
const generator = genFunc();
// next λ©μλλ₯Ό νΈμΆνλ©΄ yield ννμ κΉμ§ μ€ν λκ³ μΌμμ€μ§λ©λλ€.
// μ΄λ ν¨μμ μ μ΄κΆμ΄ νΈμΆμλ‘ μλ(yield) λ©λλ€.
console.log(generator.next()); // { value: 1, done : false}
console.log(generator.next()); // { value: 2, done : false}
console.log(generator.next()); // { value: 3, done : false}
// yield ννμμ΄ λͺ¨λ μ€ν λμμΌλ―λ‘ ν¨μ λ§μ§λ§ κΉμ§ μ€ν λ©λλ€.
// λ°νλλ value κ°μ undefined, done νλ‘νΌν°λ true κ° λ©λλ€.
console.log(generator.next()); // { value: undefined, done : true}
- μ΄ν°λ μ΄ν°μ next λ©μλμ λ¬λ¦¬ μ λλ μ΄ν° κ°μ²΄μ next λ©μλ μλ μΈμλ₯Ό μ λ¬ν μ μλ€.
- μ λλ μ΄ν° κ°μ²΄μ next λ©μλμ μ λ¬ν μΈμλ μ λλ μ΄ν° ν¨μμ yield ννμμ ν λΉλ°λ λ³μμ ν λΉ λλ€.
μ λλ μ΄ν°μ νμ©
- 무ν μ΄ν°λ¬λΈμ μμ±νλ μ λλ μ΄ν° ν¨μ
// 무ν μ΄ν°λ¬λΈμ μμ±νλ μ λλ μ΄ν° ν¨μ
const infiniteFibonacci = (function* () {
let [pre, cur] = [0, 1];
while (true) {
[pre, cur] = [cur, pre + cur];
yield cur;
}
}());
// infiniteFibonacciλ 무ν μ΄ν°λ¬λΈμ΄λ€.
for (const num of infiniteFibonacci) {
if (num > 10000) break;
console.log(num); // 1 2 3 5 8...2584 4181 6765
}
- λΉλκΈ° μ²λ¦¬
const fetch = require('node-fetch'); // nodeνκ²½μμ fetch ν¨μ μ¬μ©νκΈ° μν λΌμ΄λΈλ¬λ¦¬
// μ λλ μ΄ν° μ€νκΈ°
const async = generatroFunc => {
const generator = generatorFunc();
const onResolved = arg => {
const rst = generator.next(arg);
return rst.done ? rst.value : rst.value.then(res => onResolved(res));
};
return onResolved;
};
(async(function* fetchTodo(){
const url = 'http://jsonplaceholder.typicode.com/todos/1';
const response = yield fetch(url);
const todo = yield response.json();
consoloe.log(todo);
})());
async / await
- μ λλ μ΄ν°λ₯Ό μ¬μ©ν΄μ λΉλκΈ° μ²λ¦¬λ₯Ό ꡬννλ©΄ μ½λκ° λ§€μ° λ³΅μ‘ν΄μ§
- μ λλ μ΄ν° λ³΄λ€ λΉλκΈ° μ²λ¦¬λ₯Ό κ°λ¨νκ² κ΅¬ννκΈ° μν΄
async /await
λμ - νλ‘λ―Έμ€λ₯Ό κΈ°λ°μΌλ‘ λμ
const fetch = require('node-fetch');
async function fetchTodo() {
const url = 'https://jsonplaceholder.typicode.com/todos/1';
const response = await fetch(url);
const todo = await response.json();
console.log(todo);
};
async ν¨μ
await
ν€μλλ λ°λμasync
ν¨μ λ΄λΆμμ μ¬μ©ν΄μΌ νλ€.async
ν¨μλ λͺ μμ μΌλ‘ νλ‘λ―Έμ€λ₯Ό λ°ννμ§ μλλΌλ μ묡μ μΌλ‘ λ°νκ°μresolve
νλ νλ‘λ―Έμ€λ₯Ό λ°ν- ν΄λμ€μ
constructor
λ©μλλ λ°λμ κ°μ λ°νν΄μΌ νλ―λ‘async
ν¨μκ° λ μ μμ΅λλ€.
await ν€μλ
await
ν€μλλsettled
μν(λΉλκΈ° μ²λ¦¬κ° μνλ μν)κ° λ λκΉμ§ λκΈ°νλ€κ° settled μνκ° λλ©΄ νλ‘λ―Έμ€κ°resolve
ν μ²λ¦¬κ²°κ³Όλ₯Ό λ°νawait
ν€μλλ λ°λμ νλ‘λ―Έμ€ μμμ μ¬μ©ν΄μΌ νλ€.- μ¦, λ€μ μ€νμ μΌμ μ€μ§μμΌ°λ€κ° νλ‘λ―Έμ€κ°
settled
μνκ° λλ©΄ λ€μ μ¬κ°νλ κ²
μλ¬ μ²λ¦¬
- λΉλκΈ° μ²λ¦¬λ₯Ό μν μ½λ°± ν¨ν΄μ try...catchλ¬Έμ μ¬μ©ν΄ μλ¬λ₯Ό μΊμΉ ν μ μλ€.
- async / await μμλ try...catch λ‘ μλ¬ μ²λ¦¬ κ°λ₯
μλ¬λ νΈμΆμ λ°©ν₯μΌλ‘ μ ν λλλ° λΉλκΈ° ν¨μμ νΈμΆμκ° ν΄λΉ λΉλκΈ° ν¨μκ° μλκΈ° λλ¬Έμ
- λ¬Όλ‘ async / awaitμ νλ‘λ―Έμ€λ‘ λμνκΈ° λλ¬Έμ catch νμ μ²λ¦¬ λ©μλλ‘λ μλ¬ μ²λ¦¬ κ°λ₯
'javascript > π study' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[11μ£Όμ°¨ μ€ν°λ]48μ₯-λͺ¨λ (0) | 2022.04.08 |
---|---|
[11μ£Όμ°¨ μ€ν°λ]47μ₯-μλ¬ μ²λ¦¬ (0) | 2022.04.08 |
[10μ£Όμ°¨ μ€ν°λ]45μ₯-νλ‘λ―Έμ€ (0) | 2022.04.02 |
[10μ£Όμ°¨ μ€ν°λ]44μ₯-REST API (0) | 2022.04.02 |
[10μ£Όμ°¨ μ€ν°λ]43μ₯-Ajax (0) | 2022.04.02 |
λκΈ