ν°μ€ν 리 λ·°
μ λλ μ΄ν°λ?
: μ΄ν°λ μ΄ν°λ₯Ό μ¬μ©ν΄ μμ μ μ€νμ μ μ΄νλ ν¨μ. μΌλ°μ μΈ ν¨μλ νΈμΆλλ©΄ κ·Έ ν¨μκ° μ’
λ£λ λκΉμ§ μ μ΄κΆμ μμ ν λκΈ°κ² λλλ° μ λλ μ΄ν°μμλ κ·Έλ μ§ μμ΅λλ€.
νΉμ§
1. μ λλ μ΄ν°λ μΈμ λ νΈμΆμμκ² μ μ΄κΆμ λκΈΈ μ μμ΅λλ€.
2. μ λλ μ΄ν°λ νΈμΆν μ¦μ μ€νλμ§λ μμ΅λλ€. λμ μ΄ν°λ μ΄ν°λ₯Ό λ°ννκ³ , μ΄ν°λ μ΄ν°μ next λ©μλλ₯Ό νΈμΆν¨μ λ°λΌ μ€νλ©λλ€.
μ΄ λκ°μ§ νΉμ§μ μ μΈνκ³ λ μΌλ° ν¨μκ° λμΌνλ€κ³ μ€λͺ νκ³ μμ΅λλ€. μΌλ¨ μ λλ μ΄ν°λ₯Ό λ§λλ μΌλ°μ μΈ μμ λ₯Ό νλ μ΄ν΄λ³΄κ² μ΅λλ€.
function* gen() { yield 1; yield 2; yield 3; } let g = gen(); // "Generator { }"
=> MDNμμ λμ€λ μμ μΈλ°μ μ λλ μ΄ν°λ function μ * κΈ°νΈλ₯Ό μ¬μ©νμ¬ μ μΈμ ν©λλ€. λν yield ν€μλκ° λ±μ₯ν©λλ€. μμν κ² ν¬μ±μ΄λ€μ. CμΈμ΄ λ°°μΈ λ ν¬μΈν°μμλ μ°λ κΈ°νΈμΈλ° javascriptμμλ λ±μ₯μ νλ€μ.
μΌλ°μ μΈ ν¨μμλ λ¬λ¦¬ μ λλ μ΄ν°λ μ΄ν°λ μ΄ν°λ₯Ό μ¬μ©ν΄ μμ μ μ€νμ μ μ΄νλ ν¨μλΌκ³ νμμ΅λλ€. μλμ μ½λλ₯Ό ν λ² μ΄ν΄λ³΄μ£ .
function nomal() { for(let i=1;i<=3;i++){ console.log(i); } } function* gen() { yield 1; yield 2; yield 3; } let n = nomal(); // 1 2 3 let g = gen(); // "Generator { }" console.log(g.next()); //{ value: 1, done: false } console.log(g.next()); //{ value: 2, done: false } console.log(g.next()); //{ value: 3, done: false }
=> μΌλ°μ μΌλ‘ ν¨μλ ν λ² μ€νμ΄ λλ©΄ ν¨μκ° λλ λ κΉμ§ μ¬μ©μκ° μ μ΄ν μκ° μμ΅λλ€. μ¬κΈ°μ λ°λ³΅λ¬Έμ΄ λ€ ν λ²μ μΆλ ₯λμ΄λ²λ¦¬μ£ . κ·Έμλ¬λ¦¬ μ λλ μ΄ν°λ‘ λ§λ ν¨μλ ν¨μμ μ€νμ κ°λ³μ λ¨κ³λ‘ λλμΌλ‘μ¨ ν¨μμ μ€νμ μ μ΄νκ³ μμ΅λλ€. λν λ΄κ° μ€ννλ € ν λ, λ§μΉ μ± κΉνΌλ₯Ό κ»΄λμ κ² μ²λΌ μ΄μ μ μ€ννλ λΆλΆ λ€μλΆν° μ€νμ ν΄μ£Όκ³ μμ£ . μΌλ¨ μ΄κ² κ°μ₯ ν° μ°¨μ΄μ λλ€.
βκ·ΈλΌ λλ체 μ΄κ±Έλ‘ λ ν΄μΌνλ건λ°...
μ κ° λ³΄μλ§μ κ°κ²λ μλ¬Έμ
λλ€. μ¬μ€ κ°λ
μ μΈ λΆλΆ μ€λͺ
μ΄ λ무 λͺ¨μλμ§λ§, μ λ° κ°λ¨ν μμλ‘ μ νν μ΄ν΄κ° λμ§λ μκ³ , μ΄λ€μν©μμ μ¨μΌνλμ§ κ°λ μ€μ§ μμμ λ€μ§κ³ μ§ μ΄λ€ μν©μμ μ°κ² λλμ§λ₯Ό μμλ³΄κ² λμμ΅λλ€.
βοΈλΉλκΈ°μ νλ‘κ·Έλλ°
κ°μκΈ° λ¬Έλ²μ΄ μλ ꡬ쑰? μ κ΄ν μκΈ°κ° λμ€κ² λμλλ°μ. λΉλκΈ°μ²λ¦¬λ νΉμ μ½λμ μ€νμ΄ λλ λ κΉμ§ μ½λμ μ€νμ λ©μΆλ κ²μ΄ μλλΌ λ°λ‘ λ€μ ꡬ문μ μ€ννλ λ°©μμ λ§ν©λλ€. λΉλκΈ°μ²λ¦¬λ₯Ό μ¬μ©ν΄μΌ νλ κ²½μ°λ ν¬κ² μΈ κ°μ§κ° μμ΅λλ€.
- Ajax νΈμΆμ λΉλ‘―ν λ€νΈμν¬ μμ²
- νμΌμ μ½κ³ μ°λ λ±μ νμΌμμ€ν μμ
- μλμ μΌλ‘ μκ° μ§μ°μ μ¬μ©νλ κΈ°λ₯
μ λν λΉλκΈ°μ²λ¦¬λ₯Ό μν΄ μ¬μ©νλ ν¨ν΄μ΄ μλλ°μ, λΉλκΈ°μ νλ‘κ·Έλλ°μμ λ±μ₯νλ μΈ κ°μ§ ν¨λ¬λ€μμ΄ μμ΅λλ€. μ½λ°±κ³Ό νλΌλ―Έμ€ κ·Έλ¦¬κ³ λ§μ§λ§μ΄ μ΄λ²μ λ€λ£¨κ³ μλ μ λλ μ΄ν°μ λλ€.
βοΈ μ½λ°± (callback)
μ½λ°±μ κ°λ¨ν λ§ν΄ λμ€μ νΈμΆν ν¨μμ λλ€. μ½λ°± ν¨μλ κ·Έλ₯ ν¨μμΌ λΏμ λλ€. μ½λ°±μ΄ μ£ΌμΈκ³΅μ΄ μλλ μ½λλ‘ κ°λ¨νκ² μ΄ν΄λ³΄κ² μ΅λλ€. setTimeoutμ μ¬μ©νλ μμ λ‘ μμλ³΄κ² μ΅λλ€.
function hello(callback) { setTimeout(()=>{ callback('hello') },500) } function space(text,callback) { setTimeout(()=>{ callback(text + ' '); },500) } function world(text,callback) { setTimeout(()=>{ callback(text + 'world'); },500) } function tryWorld(){ hello(t1=>{ space(t1,t2=>{ world(t2,t3=>{ console.log(t3) //hello world }) }) }) } tryWorld();
setTimeout μ μ½λ°±ν¨μμ μ€νμ μ§μ λ μκ°λ§νΌ μ§μ°μν¨ ν μ€ννλ λ΄μ₯ ν¨μμ λλ€. μλ°μ€ν¬λ¦½νΈμ λνμ μΈ λΉλκΈ° μ²λ¦¬ν¨μμ£ . μ μμ λ hello worldλ₯Ό μΆλ ₯νλ μμ μ λλ€. λΉλκΈ° μ²λ¦¬ν¨μμμ μμλ₯Ό 보μ₯νλ κ²°κ³Όλ₯Ό μΆλ ₯νκΈ°μν΄ ν¨μκ° λλ λλ§λ€ κ²°κ³Όλ₯Ό μ½λ°±ν¨μμ 맀κ°λ³μλ‘ λκ²¨μ£Όκ³ μμ΅λλ€.
μ½λ°±λ§μ μ¬μ©νλ€λ³΄λ©΄ μ½λ°±ν¬μ λΉ μ§ μνλ μκ³ , κ·Έλ‘μΈν΄ μ½λκ°λ μ±λ λ¨μ΄μ§λ©° μλ¬μ²λ¦¬μ κ³€λν λΆλΆμ΄ μκΈΈ μ μμ΅λλ€. κ·Έμλν λμμΌλ‘ νλΌλ―Έμ€ ν¨ν΄μ΄ λ±μ₯νκ² λμλλ°μ.
π€ νλΌλ―Έμ€(Promise)
νλΌλ―Έμ€μ μ½λ°±μ΄ λ€λ₯Έκ² μλλλ€. νλΌλ―Έμ€μμλ μ½λ°±μ μ¬μ©ν©λλ€. νλΌλ―Έμ€μ κΈ°λ³Έ κ°λ
μ νλΌλ―Έμ€ κΈ°λ° λΉλκΈ°μ ν¨μλ₯Ό νΈμΆνλ©΄ κ·Έ ν¨μλ Promise μΈμ€ν΄μ€λ₯Ό λ°νν©λλ€. νλΌλ―Έμ€λ μ±κ³΅ νΉμ μ€ν¨ λ¨ λκ°μ§λ§ μΌμ΄λ©λλ€.
let models = require('../models'); function loginFunction(id,pwd,res,req){ models.User.findOne({ where: {user_id: id} }) .then((user)=>{ if(user===null || user.dataValues.password!==pwd){ console.log('λ‘κ·ΈμΈ μ€ν¨'); } else{ console.log('λ‘κ·ΈμΈ μ±κ³΅'); } }) .catch((err)=>{ console.log('μ€λ₯λ°μ!!') }) }
μ κ° Node.js μμ μμ±νλ μ½λμ μΌλΆλΆμΈλ°μ κ΅¬μ‘°λ§ λ³΄λ €κ³ μ‘°κΈ λ¨μννμμ΅λλ€. λ‘κ·ΈμΈ λμμ μ½λλ‘ κ΅¬νν κ²μΈλ°, 보μλ©΄ findOne λ©μλ μ΄νμ then μ΄ λμ€μ£ . μ΄ λ§μ findOne λ©μλμ κ²°κ³Όκ° μ±κ³΅νλ€λ λΆλΆμ λλ€. μμμ λ§νλ―μ΄ Promiseλ μ±κ³΅ νΉμ μ€ν¨ λ¨ λκ°μ§μ κ²½μ°λ§ λ°μνλ€κ³ νμμ£ .
κ·ΈλΌ catch λ? μ€ν¨ν κ²½μ°λ₯Ό λ°ννκ² μ£ . μ κ²½μ°μλ λ‘κ·ΈμΈμ μ€ν¨νλ€λ λ§μ΄ μλλΌ DB μ κ·Ό μμ²΄κ° μλͺ»λ κ²½μ°λ₯Ό λ»ν©λλ€. μλ₯Όλ€λ©΄ User ν μ΄λΈμ΄ μλ μ΄μν ν μ΄λΈμ μ κ·Όνλ €νλ€λκ° νλ κ²½μ°κ° μκ² μ£ ? νλΌλ―Έμ€ ν¨ν΄ μ΄λΌκ³ λ νμ§λ§ 보μλ€μνΌ μ½λ°±μ΄ μλκ² μλμ£ . μ무λλ κ°λ μ±μ΄ μ’κ³ μλ¬μ²λ¦¬λ catchλ¬ΈμΌλ‘ λͺ ννκ² μ²λ¦¬ν μ μλ€λ³΄λ λ§μ΄ μ°λ ν¨ν΄ μ€ νλ μ λλ€.
μ λ ν¨λ¬λ€μμ μμ κ°λ μ΄ λμ΄λΌκ³ ν μ μμ΅λλ€. μλ λ§μ΄ μ°μ΄κ³ λ μ μ©ν κΈ°λ₯μ΄λ κ°μ λ ννκ° λ§μ΄ μκ±°λ μ. λΉλκΈ° μ²λ¦¬μ λν λ΄μ©μ μμλ΄μΌνλ κ°λ¨νκ²λλ§ μμ보μμ΅λλ€.
π‘μ λλ μ΄ν°
μ½λ°± μμ λ₯Ό μ΄μ©ν΄μ μ λλ μ΄ν°λ‘ ννν΄λ³΄κ² μ΅λλ€.
function helloWorld_Hello() { setTimeout(() => { iterator.next('Hello'); }, 1000); } function helloWorld_Space(text) { setTimeout(() => { iterator.next(text + ' '); }, 1000); } function helloWorld_World(text) { setTimeout(() => { iterator.next(text + 'World'); }, 1000); } function* helloWorld() { const hello = yield helloWorld_Hello(); const space = yield helloWorld_Space(hello); const world = yield helloWorld_World(space); console.log(world); // Hello World return; } const iterator = helloWorld(); iterator.next();
μμ μ½λ°± μμ μ λ€λ₯Έμ μ΄ μλ€λ©΄ helloWorld ν¨μλ₯Ό μ λλ μ΄ν°λ‘ μμ±νμμ΅λλ€. κ·Έλμ κ°κ°μ ν¨μλ€μ μ°¨λ‘μ°¨λ‘ μ€νμ΄ λ©λλ€. Helloκ° μ€νλ ν Space, λ§μ§λ§μΌλ‘ Worldκ° μ€νμ΄ λκ²λμ£ .
μ λλ μ΄ν° ν¨μλ₯Ό μ μΈνλ©΄ λ°λ‘ μ€νμ΄ λλ κ²μ΄ μλλΌ μ΄ν°λ μ΄ν° κ°μ²΄λ₯Ό λ°ννκ² λ©λλ€. κ·Έλμ μ€νμ μν€λ €λ©΄ next λ©μλλ₯Ό μ¬μ©ν΄μΌν©λλ€.
μ΄λ²μ μ λλ μ΄ν°λ₯Ό μ²μ μκ² λμλλ° μλ°μ€ν¬λ¦½νΈμ λΉλκΈ° μ²λ¦¬λ₯Ό μν΄ μ 곡νλ λͺ¨λμ΄ μ¬λ¬κ°μ§ μλ€λ³΄λ μ€νλ € μ΄κ² λ λΆνΈνλ€λ λλλ λλκ² μ¬μ€μ λλ€. μ λλ μ΄ν°μ κ°μ μ΄ λλ¬λλ μ½λλ₯Ό λ§λκ²λλ©΄ λ€μνλ² μ΄ν΄λ΄μΌκ² λ€μ..
'javascript > λͺ¨λ μλ°μ€ν¬λ¦½νΈ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[javascript] - Promise bulkλ‘ μ²λ¦¬νκΈ° (0) | 2023.02.10 |
---|---|
8. iterators + for..of (0) | 2019.01.11 |
7. let + const (0) | 2019.01.06 |
6. default + rest + spread (0) | 2019.01.03 |
5. destructuring (0) | 2018.12.31 |
- Total
- Today
- Yesterday
- DeferredResult
- Promise error
- JavaScript
- κΈ°μμ²API
- nestjs/cli
- nestjs configService
- nestjs doc
- Promise bulk
- nestjs project
- typeorm
- Spring
- node.js backend
- μκ³ λ¦¬μ¦
- docker mysql
- nestjs module
- foreignkey
- nestjs typeorm
- Request_Limit_Exceeded
- λΉλκΈ° μμ²
- node.js
- android
- νλ‘κ·Έλλ¨Έμ€
- @nestjs/config
- backend-framework
- sequelize
- typeorm μ°κ²°
- nestjs directory
- NestJS
- nestjs config
- Spring Async
μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |