рдореБрдЭреЗ рдЕрдХреНрд╕рд░ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ async.series рдХрд╛рд░реНрдп рдХреЛ рдХрдИ рдкрд┐рдЫрд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред async.waterfall рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдкрд┐рдЫрд▓реЗ рдкрд┐рдЫрд▓реЗ рдХрд╛рд░реНрдп рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред async,auto рдмрд╣реБрдд рд╡рд░реНрдмреЛрдЬрд╝ рд╣реИ, рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЕрдирд╛рд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛ рдШреЛрд╖рдгрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди (рдпрд╛ async.series рдХрд╛ рд╕реБрдзрд╛рд░) рдХрд╛рдо рдЖрдПрдЧрд╛ред рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдХреЛ рдПрдХ рдкрд░рд┐рдгрд╛рдо рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА рдЬрд┐рд╕рдореЗрдВ рдкрд┐рдЫрд▓реЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдВрдЧреЗ
рд╕рдВрднрд╛рд╡рд┐рдд рдирд╛рдо: рд╕рдВрдЪрдп, рд╢реНрд░реГрдВрдЦрд▓рд╛рд╕рдВрдЪрдп
рдЙрджрд╛рд╣рд░рдг:
async.accumulate({
one: function(callback){
setTimeout(function(){
callback(null, 1);
}, 200);
},
two: function(callback, results){
// results: {one: 1}
setTimeout(function(){
callback(null, 2);
}, 100);
},
three: function(callback, results){
// results: {one: 1, two: 2}
setTimeout(function(){
callback(null, results.one + results.two);
}, 100);
}
},
function(err, results) {
// results is now equal to: {one: 1, two: 2, three: 3}
});
рдХреНрдпрд╛ рдЖрдкрдиреЗ async.auto
рдЪреЗрдХ рдЖрдЙрдЯ рдХрд┐рдпрд╛ рд╣реИ? рдпрд╣ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХреБрдЫ рдХреЗ рд╕рдорд╛рди рд╣реА рдХреБрдЫ рдХрд░рддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ async.auto рдмрд╣реБрдд рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдкрд┐рдЫрд▓реЗ рдПрдХ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЙрди рдмрджрд╕реВрд░рдд рд╕рд░рдгреА рдФрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЪрд░рдг рдирд╛рдо рд╣реИрдВ
async.auto({
one: function(callback){
setTimeout(function(){
callback(null, 1);
}, 200);
},
two: ["one", function(callback, results){
setTimeout(function(){
callback(null, 2);
}, 100);
}],
three: ["two", function(callback, results){
setTimeout(function(){
callback(null, results.one + results.two);
}, 100);
}
]
},
function(err, results) {
// results is now equal to: {one: 1, two: 2, three: 3}
});
рд╣рдо рдЕрдЧрд▓реЗ рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдСрдЯреЛ рдореЗрдВ рдХреБрдЫ рдПрдиреНрд╣рд╛рдВрд╕рдореЗрдВрдЯ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ - рд╣рдореЗрд╢рд╛ рдХреЙрд▓рдмреИрдХ рдЕрдВрддрд┐рдо рд╣реИ, рдФрд░ autoInject
(#608) рднреА рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╛рдореЛрдВ рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддрд╛ рд╣реИред
рдореБрдЭреЗ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рдХреНрд░рдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ - рдХреБрдЫ рдРрд╕рд╛ рдЬреЛ JS рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЧрд╛рд░рдВрдЯреАрдХреГрдд рдирд╣реАрдВ рд╣реИ (рдФрд░ рдХреЗрд╡рд▓ рдЫреЛрдЯреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдиреЛрдб рдореЗрдВ рдЧрд╛рд░рдВрдЯреА рд╣реИ)ред рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ async.waterfall
ред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ auto
рдФрд░ waterfall
рдмреАрдЪ рдореЗрдВ рдХреБрдЫ рдЪрд╛рд╣рд┐рдП, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рд╣рдо autoInject
рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВред
рдЖрдк рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛:
function seriesAccumulate(tasks, done) {
async.reduce(tasks, [], function (results, task, next) {
task(results, function (err, result) {
results.push(result);
next(err, result);
});
}, done);
}
рдореИрдВ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВред
рдЗрд╕рдХреЛ рдмрдВрдж рдХрд░рдирд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рд╢реИрд▓реА рдореЗрдВ series
рдФрд░ waterfall
рдмреАрдЪ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред