<p>async.auto рдФрд░ рдХреЛрд╢рд┐рд╢ рдХрд╛ рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдорд╛рдорд▓рд╛ ... рдкрдХрдбрд╝</p>

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

рдЖрдк рдПрд╕рд┐рдВрдХ рдХрд╛ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
v2.5.0
рд╕рдорд╕реНрдпрд╛ рдХрд┐рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╣реБрдИ (рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг/рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрд╕реНрдХрд░рдг)
v6.10.3
рдХреНрдпрд╛ рдХрд┐рдпрд╛ рддреБрдордиреЗ?

async.auto({
  returnOne: (callback) => callback(null, 1),
  tryCatch: ["returnOne", (results, callback) => {
    try {
      assert(results.returnOne === 1);
      return callback(null);
    } catch (err) {
      console.log(`Caught an error: ${err.message}`);
      return callback(err);
    }
  }],
}, (err, results) => {
  assert(results.returnOne !== 1);
  console.log(`All Done!`);
});

рдЖрдкрдиреЗ рдХреНрдпрд╛ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХреА рдереА?
рдЕрдВрддрд┐рдо aync.auto рдХреЙрд▓рдмреИрдХ рдХреЗ рдЕрдВрджрд░ рдХрд╛ рдЬреЛрд░ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ рдЬреЛ рдкрдХрдбрд╝рд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ Node.js рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред рдореЗрд░реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдореЛрдЪрд╛ рдХреЗ рднреАрддрд░ рдХреЛрдб рдХреЗ рдПрдХ рдмреНрд▓реЙрдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рджрд╛рд╡реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд░рд╣рд╛ред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рдерд╛?
рдкрд┐рдЫрд▓реЗ рдСрдЯреЛ рдЪрд░рдг рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ / рдкрдХрдбрд╝реЗрдВ рддреНрд░реБрдЯрд┐ рдкрдХрдбрд╝рддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░реА рдмрд╛рд░ tryCatch рдХреЙрд▓рдмреИрдХ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рдЕрд▓рдЧ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ:

async/dist/async.js:903
        if (fn === null) throw new Error("Callback was already called.");
                         ^
Error: Callback was already called.

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

try {
  //...
  return callback(null, result)
} catch (e) {
  //..
  return callback(e)
}

рдПрдХ рдмрдбрд╝рд╛ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдХреЙрд▓рдмреИрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдХреБрдЫ рдлреЗрдВрдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдЬреЛрд░), рддреЛ рдЗрд╕реЗ try рдмреНрд▓реЙрдХ рдореЗрдВ рдкрдХрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ catch рдореЗрдВ рдбрдмрд▓ рдХреЙрд▓рдмреИрдХ рд╣реЛрдЧрд╛ред рд╕рд╣реА рддрд░реАрдХрд╛:

let err, result
try {
  result = doSomething()
} catch (e) {
  err = e
}
callback(err, result)

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

try {
  //...
  return callback(null, result)
} catch (e) {
  //..
  return callback(e)
}

рдПрдХ рдмрдбрд╝рд╛ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдХреЙрд▓рдмреИрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдХреБрдЫ рдлреЗрдВрдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдЬреЛрд░), рддреЛ рдЗрд╕реЗ try рдмреНрд▓реЙрдХ рдореЗрдВ рдкрдХрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ catch рдореЗрдВ рдбрдмрд▓ рдХреЙрд▓рдмреИрдХ рд╣реЛрдЧрд╛ред рд╕рд╣реА рддрд░реАрдХрд╛:

let err, result
try {
  result = doSomething()
} catch (e) {
  err = e
}
callback(err, result)

@aearly рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЯрд┐рдк рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

(рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣реИрд▓реЛ! )

ЁЯСЛЁЯШК

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

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

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

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

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

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

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