Async: Async рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╕реЗрдЯ рдХрд░рдирд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рдЕрдХреНрддреВре░ 2016  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: caolan/async

рдореБрдЭреЗ рдЕрдкрдиреЗ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ async рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдИрд╡реЗрдВрдЯ рдХреЛ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд╕реЗрдЯ рдЕрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдПрдХ async рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреЙрд▓рдмреИрдХ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ)ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛрдб рдХреЛ рддреБрд░рдВрдд рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрд▓рдмреИрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рджрд┐рдЦрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╕рд░рд▓реАрдХреГрдд рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

async.auto({
  // This needs to run first, but it will finish second
  event: [(next) => {
    emitter.once('awesome', next);
  }],

  // This needs to finish near the end
  checkResults: ['event', (results, next) => {
    assert(results.event.status == 200);
    assert(results.event.msg == 'cool');

    // Do other async stuff...
    somethingAsync(next);
  }],

  // This has to start second, but before the first one finishes
  emit: ['event', (results, next) => {
    event.emit('awesome', {msg: 'cool'}, next);
  }],

  checkEmit: ['emit', (results, next) => {
    // some sort of check that can be async
  },
], done);

event рдХреЛ рдкрд╣рд▓реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди emit рд╣реЛрдиреЗ рддрдХ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред emit рдХреЛ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП event рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ (рдЙрд░реНрдл рдмрд╕ рд╣реИрдВрдбрд▓рд░ рд╕реЗрдЯ рдХрд░реЗрдВ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдпрд╣ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рдПрд╕рд┐рдВрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ? (рд╕рд╛рдл рддрд░реАрдХреЗ рд╕реЗ)

рдпрд╣рд╛рдБ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЗрд╕реЗ async рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

async.auto({
  listen: [(next, done) => {
    client.on(done);
    return next();
  },

  ...
}, callback);

рдореИрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░, рдЙрддреНрд╕рд░реНрдЬрдХ рдФрд░ рд╢реНрд░реЛрддрд╛рдУрдВ (рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реВрдВред рдкрд░рд┐рдгрд╛рдо рд▓реЗрдирд╛, рдФрд░ рдЪреЗрдХ рдХреЛ рджреВрд╕рд░реЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдирд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреНрд░рдо рдореЗрдВ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рдВрднрд╡рддрдГ рд╣реЛрдЧрд╛)ред рд╕рд╛рде рд╣реА, рдХреЛрдб рдХрдо рд╕рдкрд╛рдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕реЗрдЯрдЕрдк рдореЗрдВред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рд╡рд╣ рдкрд╛рдЧрд▓рдкрдирдкреВрд░реНрдг рдСрдЯреЛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реИ: рдмрд┐рд▓реНрдбрд┐рдВрдЧ_ рдирд┐рд░реНрдорд╛рдг:

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

рд╣рд╛рдп @ рд╕реЗрд╡рди , рд╕рд╡рд╛рд▓ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддреНрд╡рд░рд┐рдд, рд╕рд╛рдл рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛:

async.auto({
    // This needs to finish near the end
  checkResults: [(next) => {
    return next(null, (results, next) => {
      assert(results.event.status == 200);
      assert(results.event.msg == 'cool');

      // Do other async stuff...
      // somethingAsync(next);
    });
  }],

  // This needs to run first, but it will finish second
  event: ['checkResults', (handler, next) => {
    emitter.once('awesome', handler.checkResults);
    return next();
  }],

  // This has to start second, but before the first one finishes
  emit: ['event', (results, next) => {
    // Should this be emitter.emit instead of event.emit?
    event.emit('awesome', {msg: 'cool'}, next);
  }],

  checkEmit: ['emit', (results, next) => {
    // the results of `checkResults` will be in `results.emit`
    // as the handler on 'awesome' was passed the `next`
    // callback from `emit`

    // some sort of check that can be async
    yourChecks(next);
  }]
}, function done(err) {
    // everything finished running, unless `err` !== `null`
});

рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдЖрдк рдХреЗрд╡рд▓ event рдФрд░ checkResults рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕реНрд╡реИрдк рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдереЛрдбрд╝рд╛ рдХреНрд▓реАрдирд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ event рд╣реИрдВрдбрд▓рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ checkResults ред checkResults рдЕрдм рдХреЗрд╡рд▓ рд╣реИрдВрдбрд▓рд░ рдХреЛ event ред

рдирд┐рд╖реНрдкрд╛рджрди рдЖрджреЗрд╢ рд╣реЛрдЧрд╛:
checkResults --> event --> emit --> handler (passed to event from checkResults) --> checkEmit --> done ред

рдЕрдЧрд░ рдХреБрдЫ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред

рд╣рд╛рдБ, рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рд╡рд╣ рдкрд╛рдЧрд▓рдкрдирдкреВрд░реНрдг рдСрдЯреЛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реИ: рдмрд┐рд▓реНрдбрд┐рдВрдЧ_ рдирд┐рд░реНрдорд╛рдг:

рдорд╛рдирд╛ред рдЖрдорддреМрд░ рдкрд░ async рдХреЙрд▓рдмреИрдХ рдФрд░ рдЗрд╡реЗрдВрдЯ рдПрдорд┐рдЯрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдорд┐рдХреНрд╕ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ ...

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

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

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

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

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

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

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