рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдПрд╕рд┐рдВрдХ/рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛рд░реНрдп рд╣реИрдВ рдФрд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдХрддрд╛рд░рдмрджреНрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдШрдЯрдирд╛рдУрдВ рдкрд░ "рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ" рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рднрд╛рдЧрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рддреЛ рдореИрдВ рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
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
, launch
рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА login
рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧреАред
@hargasinski рдореИрдВрдиреЗ рдРрд╕рд╛ рд╕реЛрдЪрд╛ рдФрд░ рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рджреЛ рдирдП рдкреНрд░рд╢реНрди
@codeofsumit рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдереЛрдбрд╝реА рдЧреБрдорд░рд╛рд╣ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдереА, рдореБрдЭреЗ queue
рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рд╣реЛ рдЧрдпрд╛ред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
- рдХрддрд╛рд░ рдХреИрд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ? рдкрд╣рд▓реЗ рдзрдХреНрдХрд╛ рдХреЗ рдмрд╛рдж рд╢реБрд░реВ рдирд╣реАрдВ рд▓рдЧ рд░рд╣рд╛ рдерд╛
queue
рдХреЛ task
рд╢реБрд░реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛рдиреА рдЬрдм рдЖрдк q.push
рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЖрдк рдПрдХ рдХреЛрдб рдирдореВрдирд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрд░реЗ рд▓рд┐рдП рдЪрд▓рд╛ред
рд╕рд╛рдЗрдб рдиреЛрдЯ: рдпрджрд┐ рдЖрдк ES7 рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ async
рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ async
рдФрд░ рдЕрдкрдиреЗ рдХреЛрдб transpiling, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдореЗрдВ рд▓рдкреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ 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
рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЖрдк рдПрдХ рдХреЛрдб рдирдореВрдирд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрд░реЗ рд▓рд┐рдП рдЪрд▓рд╛редрд╕рд╛рдЗрдб рдиреЛрдЯ: рдпрджрд┐ рдЖрдк ES7 рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
async
рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИasync
рдФрд░ рдЕрдкрдиреЗ рдХреЛрдб transpiling, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдореЗрдВ рд▓рдкреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛async.asyncify
ред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВредрдпрд╣реАрдВ рдореИрдВ рднреНрд░рдорд┐рдд рд╣реЛ рдЧрдпрд╛ред рдЬрдм рдЖрдк рдЗрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ рддреЛ
worker
рдЖрдкasync.queue
рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдХрд╛рд░реНрдп рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдИрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдПlaunch
,login
, рдФрд░goToMonth
рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдмрд╕worker
рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,рдЕрдиреНрдпрдерд╛, рдпрджрд┐ рдЖрдкрдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрддрд╛рд░рдмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдереЛрдбрд╝рд╛ рд╣реИрдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИред