Async: рдлрд╝реАрдЪрд░/рд╕рдорд░реНрдерди - рдЦрд╛рд▓реА рдЯрд╛рд╕реНрдХрд╕реЗрдЯ -> рдЕрдВрддрд┐рдо рдХреЙрд▓рдмреИрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдЧрд▓реЗ рдЯрд┐рдХ рдкрд░ рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 13 рдЕрдкреНрд░реИрд▓ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: caolan/async

рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо async.map рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА async рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

рдореЗрд░рд╛ рдкреНрд░рд╢реНрди/рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рд╣реИ - рдпрджрд┐ рдХрд╛рд░реНрдп рд╕рд░рдгреА/рд╕реЗрдЯ рдЦрд╛рд▓реА рд╣реИ, рддреЛ рдХреНрдпрд╛ async рдЕрдЧрд▓реЗ рдЯрд┐рдХ рдкрд░ рдЕрдВрддрд┐рдо рдХреЙрд▓рдмреИрдХ рдХреЛ рдЖрдЧ рд▓рдЧрд╛рддрд╛ рд╣реИ? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреНрдпрд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП async рдХреЛ рдмрддрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ? рдПрдХ рдЕрдЪреНрдЫрд╛ рдлреАрдЪрд░ рд╣реЛрдЧрд╛ред
рдЕрдиреНрдпрдерд╛, рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╣реИ, рдЬреЛ рдЕрдзрд┐рдХ рд╡рд░реНрдмреЛрдЬрд╝ рд╣реИ:

async.map([], function(item,cb){

}, function final(err, results){
    process.next(function(){ 
      cb(err,results);
   });
});

рдЬрд╝рд╛рд▓реНрдЧреЛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди, рдпрд╣ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ:

async.map([], function(item,cb){

}, cb);

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЪреАрдЬ рд╣рдо рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рд░рдгреА рдЦрд╛рд▓реА рд╣реИ, рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЬрд▓реНрджреА рд╡рд╛рдкрд╕ рдЖрдПрдВ return

if(![].length){
   return process.next(cb);
}

рдЖрдк рдХреНрдпрд╛ рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╣рд╛рдВ, @hargasinski рдХреЗ рдкрд╛рд╕ рдкреИрд╕реЗ рд╣реИрдВред рд╣рдо рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░рдгреЛрдВ рд╕реЗ Zalgo рд╕реЗ рдЖрдкрдХреА рд░рдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдПрдХ рд╕рд░рд▓реАрдХрд░рдг рдЬреЛ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╡рд╣ рд╣реИ:

function final(err, results){
    process.nextTick(cb, err, results);
}

async.nextTick / async.setImmediate / process.nextTick / setImmediate рд╕рднреА рдЖрдкрдХреЛ args рдкрд╛рд╕ рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЕрд░реЗ @ORESoftware , рдкреНрд░рд╢реНрди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА/рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП, async рдЙрд╕реА рдЯрд┐рдХ рдкрд░ рдЕрдВрддрд┐рдо рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░рдгреЛрдВ рд╕реЗ v2.0.0 рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд deferrals рд╣рдЯрд╛ рджрд┐рдП рдЧрдП рдереЗ (рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ async < v2.0.0 рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд░реНрдирд┐рд░реНрдорд┐рдд рдЖрд╕реНрдердЧрди рднреА рдерд╛)ред

рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рдорд╛рдзрд╛рди async.map рдХреЛ async.ensureAsync рдореЗрдВ рд▓рдкреЗрдЯ рд░рд╣рд╛ рд╣реИ:

async.ensureAsync(async.map)([], function(item, cb) {

}, cb);

рдпрд╛ рдХрд╣реАрдВ рдЖрдкрдХреЗ рдХреЛрдб рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ:

const asyncMap = async.ensureAsync(async.map);
// then call `asyncMap` just as you would `async.map`

рдЕрдиреНрдпрдерд╛, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд process.nextTick рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдиреНрдп рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХреЛрдб рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ async.setImmediate рдпрд╛ async.nextTick рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреА рдЪрд╛рд╣рд┐рдПред

рд╣рд╛рдВ, @hargasinski рдХреЗ рдкрд╛рд╕ рдкреИрд╕реЗ рд╣реИрдВред рд╣рдо рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░рдгреЛрдВ рд╕реЗ Zalgo рд╕реЗ рдЖрдкрдХреА рд░рдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдПрдХ рд╕рд░рд▓реАрдХрд░рдг рдЬреЛ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╡рд╣ рд╣реИ:

function final(err, results){
    process.nextTick(cb, err, results);
}

async.nextTick / async.setImmediate / process.nextTick / setImmediate рд╕рднреА рдЖрдкрдХреЛ args рдкрд╛рд╕ рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

рдУрд╣ рдЕрдЪреНрдЫрд╛, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ process.nextTick, рдЖрджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдпрд╣ рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рд╣реИ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

cobya picture cobya  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдзрдХреНрдХрд╛ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ? рдореБрдЭреЗ Async.js (рд╕рдорд╛рдирд╛рдВрддрд░ рдпрд╛ рджреМрдбрд╝ рдореЛрдб) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
alfredoborrero picture alfredoborrero  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bradens picture bradens  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

PsyTae picture PsyTae  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ORESoftware picture ORESoftware  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ