рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЙрд▓ рдЙрджрд╛ред async.each
, рдФрд░ рдЙрд╕ рд░рдирдЯрд╛рдЗрдо рдХреЗ рджреМрд░рд╛рди, рдЬрд┐рд╕ рд╕рд░рдгреА рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕рдореЗрдВ рд╕рдВрд╢реЛрдзрди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХрднреА рднреА рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдХреЙрд▓рдмреИрдХ рдХреЛ рджреЛ рдмрд╛рд░ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг:
async = require "async"
arr = [1, 2, 3]
async.each arr, ((i, cb) -> console.log "i"; setImmediate(cb)), (err) -> console.log "done"
arr.push(4)
рдпрд╣ рдЙрджрд╛рд╣рд░рдг 3 рдореВрд▓ рд╕рд░рдгреА рддрддреНрд╡реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк рдХрд░рддрд╛ рд╣реИ, рдФрд░ i
рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдлрд┐рд░ рдХреЙрд▓рдмреИрдХ рдХреЛ рдХрднреА рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ async.each
рдпрд╣ рдХрд░ рд░рд╣рд╛ рд╣реИ:
if (completed >= arr.length) {
callback(null);
}
рдПрд╕рд┐рдВрдХ рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╕рдордп, рдпрд╣ arr.length
рдЦрд┐рд▓рд╛рдл рддреБрд▓рдирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ ... рдХреНрдпрд╛ рдореВрд▓ рд╕рд░рдгреА рд▓рдВрдмрд╛рдИ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдФрд░ рдЙрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдХрд┐ рдкреВрд░реНрдг рдХреЙрд▓рдмреИрдХ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ ?
рдмреЗрд▓рд╛:
http://jsfiddle.net/4ysKX/1/
рдЖрдк рд╕рд╣реА рд╣реИрдВ -- рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рди рдХрд░реЗрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ async рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреА рд╕рд░рдгреА рдХреЛ рдХреНрд▓реЛрди рдХрд░реЗрдВред
@ рдЕрд░реНрд▓реА рд╣рд╛рдВ, рдпрд╣ рдПрдХ рдХрд╛рдордХрд╛рдЬ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЖрд╕рд╛рди рдЧрд▓рддреА рд╣реИ, рдФрд░ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рдХрдард┐рди рдореБрджреНрджрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдИрдПрдордПрдЪрдУ рдЗрд╕реЗ рдХреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдиреЗ рдореБрдЭреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдЕрдм рджреЛ рдмрд╛рд░ рдХрд╛рдЯ рд▓рд┐рдпрд╛ рд╣реИред
рдЗрдирдкреБрдЯ рдХреЛ рдХреНрд▓реЛрди рдХрд┐рдП рдмрд┐рдирд╛ _any_ рд╕рд░рдгреА рд╕рдВрд╢реЛрдзрди рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд╛ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрдЯрд░реЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рдВрд╢реЛрдзрди, рд▓реЗрдХрд┐рди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд _asynchronous_ рд╕рдВрд╢реЛрдзрди рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕реБрд░рдХреНрд╖рд╛ рдХреНрд▓реЛрди рдХреЗ рдмрд┐рдирд╛ рднреА рд╕реАрдзреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ arr.length
рдирд╣реАрдВ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрдЪрд╛рд╣рд┐рдП
(рдореИрдВ @bradens рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреАрдЖрд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдВрддрддрдГ рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @caolan рдкрд░
рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рд╕рд░рдгреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрд░рд┐ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдмрдбрд╝реА рд╕рд░рдгреА рд╣реИ, рдпрд╛ async.each
et al рдХрдИ рдмрд╛рд░ рдХреЙрд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдзреАрдорд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред
рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рд╕рд░рдгреА рдкреНрд░рддрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрд░рд┐ рд╣реЛрдЧреАред рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЪреВрдВрдХрд┐ рд╕рд░рдгреА рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕рдордХрд╛рд▓рд┐рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореВрд▓ рд╕рд░рдгреА рд▓рдВрдмрд╛рдИ рдХреЛ рдмрд╛рдж рдореЗрдВ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣, рдХреЙрд▓рдмреИрдХ рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЗрдЯрд░реЗрдЯрд░ рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рдПрдЧреА, рднрд▓реЗ рд╣реА рдЗрд╕ рджреМрд░рд╛рди рд╕рд░рдгреА рдмрджрд▓ рджреА рдЧрдИ рд╣реЛред рдпрд╣ async.each
рд▓рд┐рдП рдЖрд╕рд╛рди рдФрд░ рд╢реВрдиреНрдп рдУрд╡рд░рд╣реЗрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╕рднреА рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛред
рдпрд╣ #557 рдХрд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИред
рдХреНрдпрд╛ рдПрд╕рд┐рдВрдХ рдиреЗ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рдж рд╕рд░рдгреА рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдерд╛? рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рддрдереНрдп рдХреЗ рдмрд╛рдж рдореВрд▓ рд╕рд░рдгреА рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЕрдзрд┐рдХ рддрддреНрд╡реЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рд╣реЛ рд╕рдХреЗред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдХреНрдпрд╛ рдПрд╕рд┐рдВрдХ рдиреЗ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рдж рд╕рд░рдгреА рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдерд╛? рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рддрдереНрдп рдХреЗ рдмрд╛рдж рдореВрд▓ рд╕рд░рдгреА рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЕрдзрд┐рдХ рддрддреНрд╡реЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рд╣реЛ рд╕рдХреЗред