κ·Έλμ λͺ κ°μ§ async/await κΈ°λ₯μ κ°μ§κ³ μμΌλ©° λκΈ°μ΄μ λ£κ³ μΆμ΅λλ€. νΉμ websocket μ΄λ²€νΈμμ "무μμλ‘" μ€νλμ§λ§ μ°¨λ‘λ‘ μ€νν΄μΌ ν©λλ€. κ·Έλμ μ΄ μ½λλ‘ μ΄κ²μ ν μ€νΈνκ³ μμ΅λλ€.
const aida = {
async launch() {
await someFunction();
},
async login() {
await Auth();
await UserSettings();
},
async goToMonth() {
await JumpToDefaultMonth();
}
};
const q = async.queue(function(task, callback) {
console.log('hello ' + task.name);
callback();
}, 1);
q.drain = function() {
console.log('all items have been processed');
};
q.push(aida.launch());
q.push(aida.login());
q.push(aida.goToMonth());
μλ₯Ό λ€μ΄ login()
λ launch()
κ° μλ£λ νμλ§ μ€νλ©λλ€.
λ΄κ° λκ° μλͺ»νκ³ μμ΅λκΉ, μλλ©΄ μ΄ λΌμ΄λΈλ¬λ¦¬κ° λμκ² λ§μ§ μμ΅λκΉ?
μλ νμΈμ @codeofsumit , μ§λ¬Έ μ£Όμ μ κ°μ¬ν©λλ€!
μ½λλ₯Ό 보면 λ§μ§λ§ μΈ μ€μ λ¬Έμ κ° μλ€κ³ μκ°ν©λλ€. ν¨μλ₯Ό νΈμΆνκ³ queue
ν¨μλ₯Ό νΈμνλ κ²κ³Ό λ°λλ‘ λ°ν κ°μ queue
μ νΈμν©λλ€. μ°Έκ³ νλͺ© QueueObject
λ¬Έμλ₯Ό λν μμΈν μ 보λ₯Ό μνμλ©΄ q.push
. λ€μκ³Ό κ°μ΄ λ³κ²½ν΄ 보μμμ€.
q.push(aida.launch);
q.push(aida.login);
q.push(aida.goToMonth);
λΉμ μ΄ κ°μ§κ³ μκΈ° λλ¬Έμ concurrency
μ 1
, νμλ§ μ²λ¦¬ν©λλ€ login
ν launch
μλ£ν©λλ€.
@hargasinski λλ κ·Έλ κ² μκ°νκ³ μλνμ§λ§ λ κ°μ§ μλ‘μ΄ μ§λ¬Έμ΄
@codeofsumit μ£μ‘ν©λλ€. μ΄μ λκΈμ΄ μ½κ° μλͺ»λμλ€λ κ²μ κΉ¨λ¬μμ΅λλ€. queue
κ° λ€λ₯Έ κΈ°λ₯κ³Ό νΌλλμμ΅λλ€. λ΄κ° λͺ
νν ν μ μκΈ°λ₯Ό λ°λλλ€.
- λκΈ°μ΄μ μ΄λ»κ² μμλ©λκΉ? 첫 λ²μ§Έ νΈμ ν μμλμ§ μμ κ² κ°μ΅λλ€.
queue
λ task
, μ¦ q.push
λ₯Ό νΈμΆν λ μμν΄μΌ ν©λλ€. μ½λ μνμ μ 곡ν μ μμ΅λκΉ? μμ μ½λλ λλ₯Ό μν΄ μ€νλμμ΅λλ€.
μ°Έκ³ μ¬ν: async
μ ν¨κ» es7 async
ν¨μλ₯Ό μ¬μ©νκ³ μ½λλ₯Ό νΈλμ€νμΌνλ κ²½μ° async.asyncify
λ‘ λνν΄μΌ ν©λλ€. μμΈν λ΄μ©μ μ΄ λκΈ μ μ°Έμ‘°νμΈμ.
- ν¨μμ 맀κ°λ³μλ₯Ό μ λ¬νλ €λ©΄ μ΄λ»κ² ν΄μΌ ν©λκΉ?
μ¬κΈ°μ λ΄κ° νΌλμ€λ¬μμ‘λ€. worker
μμ± μ async.queue
μ λ¬νλ launch
, login
λ° goToMonth
λ₯Ό μ€νν΄μΌ νλ κ²½μ° worker
ν¨μλ₯Ό λ£μΌλ©΄ λ©λλ€. μλ₯Ό λ€μ΄,
const q = async.queue(function(task, callback) {
async.series([
async function() {
await aida.launch(task.foo, task.boo);
},
async function() {
await aida.login(task.baz);
},
// etc...
], callback);
}, 1);
// on a websocket event
q.push({foo: websocketData.foo, bar: websocketData.bar, baz: websocketData.baz});
κ·Έλ μ§ μμΌλ©΄ ν¨μλ₯Ό λκΈ°μ΄μ λ£μ΄μΌ νλ κ²½μ° μ½κ° ν΄νΉλμ§λ§ λ€μκ³Ό κ°μ΄ ν μ μμ΅λλ€.
const q = async.queue(async function(task) {
await task.func.apply(null, task.args);
}, 1);
// on a websocket event
q.push({func: aida.launch, args: [websocketData.foo, websocketData.bar]});
q.push({func: aida.login, args: [websocketData.baz]});
q.push({func: aida.goToMonth, args: []});
λ°λΌκ±΄λ μ΄κ²μ μ‘°κΈ λ λͺ νν©λλ€.
μ΄, μ΄κ²μ λ§€μ° μ λ§ν΄ 보μ λλ€. μκ°μ λ΄μ΄ μ΄λ κ² μμΈνκ² μ€λͺ ν΄μ£Όμ μ κ°μ¬ν©λλ€. λ§μ λμμ΄ λ©λλ€!
λν: λλ λΉμ μ΄ μ΄ λ¦¬ν¬μ§ν 리μ λ¬Έμ λ₯Ό λ§€μ° λΉ λ₯΄κ² ν΄κ²°νκ³ μλ€λ κ²μ μμμ°¨λ Έμ΅λλ€. π λ§€μ° μΈμμ μ λλ€. κ³μν΄μ μ’μ μΌμ νμμμ€!
κ°μ₯ μ μ©ν λκΈ
@codeofsumit μ£μ‘ν©λλ€. μ΄μ λκΈμ΄ μ½κ° μλͺ»λμλ€λ κ²μ κΉ¨λ¬μμ΅λλ€.
queue
κ° λ€λ₯Έ κΈ°λ₯κ³Ό νΌλλμμ΅λλ€. λ΄κ° λͺ νν ν μ μκΈ°λ₯Ό λ°λλλ€.queue
λtask
, μ¦q.push
λ₯Ό νΈμΆν λ μμν΄μΌ ν©λλ€. μ½λ μνμ μ 곡ν μ μμ΅λκΉ? μμ μ½λλ λλ₯Ό μν΄ μ€νλμμ΅λλ€.μ°Έκ³ μ¬ν:
async
μ ν¨κ» es7async
ν¨μλ₯Ό μ¬μ©νκ³ μ½λλ₯Ό νΈλμ€νμΌνλ κ²½μ°async.asyncify
λ‘ λνν΄μΌ ν©λλ€. μμΈν λ΄μ©μ μ΄ λκΈ μ μ°Έμ‘°νμΈμ.μ¬κΈ°μ λ΄κ° νΌλμ€λ¬μμ‘λ€.
worker
μμ± μasync.queue
μ λ¬νλlaunch
,login
λ°goToMonth
λ₯Ό μ€νν΄μΌ νλ κ²½μ°worker
ν¨μλ₯Ό λ£μΌλ©΄ λ©λλ€. μλ₯Ό λ€μ΄,κ·Έλ μ§ μμΌλ©΄ ν¨μλ₯Ό λκΈ°μ΄μ λ£μ΄μΌ νλ κ²½μ° μ½κ° ν΄νΉλμ§λ§ λ€μκ³Ό κ°μ΄ ν μ μμ΅λλ€.
λ°λΌκ±΄λ μ΄κ²μ μ‘°κΈ λ λͺ νν©λλ€.